Я создаю базу данных профессор-лектор-студент, для которой я изо всех сил пытаюсь получить правильные запросы MySQL.
Вот мои таблицы:
Table PROFESSOR (id, name)
Table LECTURE (id, name, professorID, offeredThisYear) ... offeredThisYear is 1 or 0
Table STUDENT (id, name, inState) ... inState = 1 or 0
Table LECTURE-STUDENT (lectureID, studentID)
- НекоторыеЛекции предлагаются в этом году, некоторые или нет
- Некоторые СТУДЕНТЫ являются государственными, другие или нет
Запрос Я пытаюсь написать:
ДляID ПРОФЕССОРА = 1, я хочу получить список всех ЛЕКЦИЙ, которые он / она преподает в этом году (offerThisYear = 1), и список только учеников штата (inState = 1), зарегистрированных в классе. Если у какой-либо ЛЕКЦИИ нет СТУДЕНТА, я хочу, чтобы она все еще была в списке.
Мои запросы:
SELECT * FROM lectures
WHERE professorid = 2
AND offeredThisYear = 1
ORDER BY RAND()
Возвращает
Lecture 15=Law
Lecture 7=Philosophy
Lecture 17=Mathematics
Lecture 13=German
Теперь для каждоголекция, я хочу список студентов из других штатов, например:
Lecture 15=Law (Joshua, Patricia)
Lecture 7=Philosophy (Patricia, Joshua, Mary, Joseph, Sandra)
Lecture 17=Mathematics (Jessica)
Lecture 13=German ()
*** Примечание: никто не изучает немецкий, но он все еще указан, потому что профессор 2 преподает немецкий в этом году
Я не знаюЯ не хочу делать отдельный запрос для каждой лекции, например:
SELECT GROUP_CONCAT(DISTINCT p.name, ' ' ORDER BY RAND() SEPARATOR ', ')
FROM students p, lectures_students q
WHERE q.lectureid = 17
AND p.id = q.studentid
AND p.instate = 1
Как мне получить этот вложенный список одним запросом?
Я смотрел на решения в различных темах на форумах. , но все еще не могу понять, как написать запрос для всех моих спецификаций, особенно для условия «нет ученика для этого класса»
Большое спасибо за вашу помощь. Я программист-любитель, но это выходит за рамки моей компетенции.