MySQL запрос с несколькими JOIN

КонсультацииРубрика: MySQLMySQL запрос с несколькими JOIN
0 +1 -1
Александр спросил 7 месяцев назад

Тема, судя по форумам, избитая, но, тем не менее, прошу помочь решить проблему:
Связываем таблицы:
turnir(id, name, id_type) — перечень турниров,
common(id, id_turnir, id_user, score,…..) — результаты спортсменов,
user(id, fam, imya,….) — данные спортсменов
type(id, name…) — типы соревнований

‘SELECT  t.data1, t.data2, t.name as tname, u.fam, u.imya, c.score, c.gruppa
FROM turnir t
LEFT JOIN common c ON t.id   = c.turnir
LEFT JOIN user u   ON c.user = u.id
ORDER BY data2 DESC, c.gruppa, c.score DESC ‘

Все работает ! Но как только пытаюсь к turnir подключить словарь type (SELECT… y.name… +JOIN type y ON t.type = y.id)- все рушится.
Получается, что если имеется цепочка связей — работает, но как только к turnir подключается ещё одна таблица — полный бенц!
Как быть?
Конечно, могу в turnir добавить такие же поля, как и в type ,и заполнять их из type, а в запросе таблицу type и вовсе не использовать, но дело в принципе. Но не получается.
Спасибо.

1 ответ
0 +1 -1
Роман Чернышов Админ. ответил 7 месяцев назад

Добрый день! Для начала попробуйте выполнить запрос в БД через PHPMyAdmint, он покажет статус выполнения и если есть ошибки в самом запросе, то сообщить о них.

Также запрос может возвращать нулевое значение, если в таблице type не найдено соответствий для выбираемых строк из turnir. Т.е., если у сроки в таблице turnir значение поля type равно нулю, а в таблице turnir нет строк со значением поля id равным также нулю — эти сроки выбраны и возвращены запросом не будут. Убедитесь, что в полях turnir.type и полях type.id есть одинаковые значения для соответствия.

Если в таблице type есть поле data2, то ваш запрос будет падать с ошибкой сортировки выборки. Так как в запросе явно не указано по полю из какой таблицы производить сортировку: ORDER BY data2 DESC, замените на ORDER BY t.data2 DESC.

Как вариант для выборки из type добавить в запрос — подзапрос, таким образом:
‘SELECT  t.data1, t.data2, t.name as tname, u.fam, u.imya, c.score, c.gruppa,
(SELECT y.name FROM type y WHERE t.type = y.id) AS yname
FROM turnir t
LEFT JOIN common c ON t.id   = c.turnir
LEFT JOIN user u   ON c.user = u.id
ORDER BY data2 DESC, c.gruppa, c.score DESC ‘

Консультации

Последние вопросы
Меню

Archive

Портфолио Все работы


с 2009 года по сегодняшний день, создано более 300 сайтов...