ВЫБЕРИТЕ с несколькими СОЕДИНЕНИЯМИ из нескольких таблиц - PullRequest
0 голосов
/ 08 мая 2019

У меня есть редактор расписания на веб-странице, и мне нужно выбрать TIMETABLE, используя идентификатор CLASS, и всеми пользователями, которые находятся в этом классе, с помощью USER.CLASS ID = CLASS ID, и от этого пользователи получают группы, которые имеют идентификатор группы иПОЛУЧИТЕ ВСЕ РАСПИСАНИЯ с ID ГРУППЫ.Извините за мои объяснения.

Пользователь связан с классом по cid.userGroup - это просто uid и gid.В расписании есть как cid, так и gid.Когда first равно null, дается секунда.

Я попробовал код ниже, и многие комбинации всех JOIN'ов, которые я не могу заставить работать

SELECT DISTINCT
    `timetable`.*,
    `group`.name AS groupName,
    `class`.name AS className
FROM
    `timetable`,
    `user`,
    `userGroup`
LEFT OUTER JOIN `group` ON `userGroup`.gid = `group`.gid
LEFT OUTER JOIN `class` ON `class`.cid = '1'
WHERE
    `user`.cid = 1 AND `userGroup`.uid = `user`.uid AND(
        `timetable`.gid = `group`.gid OR `timetable`.cid = '1'
    )

Я ожидал вывода с3 расписания.1 от класса и 2 от разных групп, которые связаны с пользователями, которые связаны с классом.Я также хотел имена, которые из GROUP и один из CLASS по уважаемым идентификаторам т.е. (gid, cid).Есть ли способ получить NULL для className, если cid имеет значение null?

1 Ответ

0 голосов
/ 09 мая 2019

Я последовал предложению @ spencer7593, используя только «новый синтаксис» JOIN.

SELECT DISTINCT
    `timetable`.*,
    `group`.name AS groupName,
    `class`.name AS className
FROM
    `timetable` 
JOIN `user` ON `user`.cid = 1
JOIN `userGroup` ON `userGroup`.uid = `user`.uid
LEFT JOIN `group` ON `userGroup`.gid = `group`.gid AND `timetable`.cid IS null
LEFT JOIN `class` ON `class`.cid = '1' AND `timetable`.gid IS null
WHERE
    `timetable`.gid = `userGroup`.gid OR `timetable`.cid = '1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...