Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сделать join 2 раза к одной таблице?
Форумы портала PHP.SU » » Работа с СУБД » Сделать join 2 раза к одной таблице?

Страниц (1): [1]
 

1. lamokk - 23 Мая, 2018 - 14:40:45 - перейти к сообщению
Добрый день.

Подскажите с запросом:
Нужно из второй таблицы (games) вытащить название игры 2 раза (поле name_game).
В первой таблице (obmen) только id первой и второй игры.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM obmen
  2. LEFT JOIN games ON obmen.id_game=games.id
  3. LEFT JOIN games AS games2 ON obmen.id_game_on=games2.id
'

Но данный запрос не выдает 2 раза поле name_game, понимаю что нужно сделать AS но что-то не пойму как?

Может и запрос корявый и его можно написать правильнее?
2. Мелкий - 23 Мая, 2018 - 14:45:41 - перейти к сообщению
Где проверяете запрос?
А то может быть через PHP сразу ассоциативным массивом и одноимённые ключи ожидаемо склеиваются.

Сам запрос выглядит корректно, разве только сомневаюсь в целесообразности left join, вероятнее inner join уместнее, если конечно вы не позволяете ничто поменять на что-то.
3. lamokk - 23 Мая, 2018 - 14:48:59 - перейти к сообщению
Да именно в php.
Ключи name_game склеивает и выдает только последний.
Мне нужно вывести name_game получается 2 раза и они разные как Вы понимаете для первой и второй игры.
4. Мелкий - 23 Мая, 2018 - 15:21:56 - перейти к сообщению
Пишите не отладочный select *, а перечисляя необходимые поля, одноимённые соответственно с псевдонимами:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT games.name_game AS name_game_1,
  2. games2.name_game AS name_game_2,
  3. ...
5. lamokk - 23 Мая, 2018 - 15:37:20 - перейти к сообщению
Спасибо.

Вот так заработало:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT obmen.id_game, obmen.id_game_on, games.name_game, games2.name_game AS name_game2
  2. FROM obmen
  3. LEFT JOIN games ON obmen.id_game=games.id
  4. LEFT JOIN games AS games2 ON obmen.id_game_on=games2.id


Но конечно перечислять все поля которых у меня еще 20 штук муторно...

Вот так можно сократить:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT obmen.*, games.*, games2.name_game AS name_game2
  2. FROM obmen
  3. LEFT JOIN games ON obmen.id_game=games.id
  4. LEFT JOIN games AS games2 ON obmen.id_game_on=games2.id

по таблице games2 уже перечисляем

 

Powered by ExBB FM 1.0 RC1