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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сделать join 2 раза к одной таблице?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
lamokk
Отправлено: 23 Мая, 2018 - 14:40:45
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Добрый день.

Подскажите с запросом:
Нужно из второй таблицы (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 но что-то не пойму как?

Может и запрос корявый и его можно написать правильнее?
 
 Top
Мелкий Супермодератор
Отправлено: 23 Мая, 2018 - 14:45:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Где проверяете запрос?
А то может быть через PHP сразу ассоциативным массивом и одноимённые ключи ожидаемо склеиваются.

Сам запрос выглядит корректно, разве только сомневаюсь в целесообразности left join, вероятнее inner join уместнее, если конечно вы не позволяете ничто поменять на что-то.


-----
PostgreSQL DBA
 
 Top
lamokk
Отправлено: 23 Мая, 2018 - 14:48:59
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Да именно в php.
Ключи name_game склеивает и выдает только последний.
Мне нужно вывести name_game получается 2 раза и они разные как Вы понимаете для первой и второй игры.

(Отредактировано автором: 23 Мая, 2018 - 14:49:25)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Мая, 2018 - 15:21:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Пишите не отладочный select *, а перечисляя необходимые поля, одноимённые соответственно с псевдонимами:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT games.name_game AS name_game_1,
  2. games2.name_game AS name_game_2,
  3. ...


-----
PostgreSQL DBA
 
 Top
lamokk
Отправлено: 23 Мая, 2018 - 15:37:20
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Спасибо.

Вот так заработало:
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 уже перечисляем

(Отредактировано автором: 23 Мая, 2018 - 15:48:48)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB