Ниже мой запрос:
$query = "
SELECT DISTINCT gr.SessionId, t.TeacherUsername, t.TeacherForename,
t.TeacherSurname, cm.ModuleId, m.ModuleName,
cm.CourseId, c.CourseName, st.Year, st.StudentUsername,
st.StudentForename, st.StudentSurname, gr.Mark, gr.Grade
FROM Teacher t
INNER JOIN Session s ON t.TeacherId = s.TeacherId
JOIN Grade_Report gr ON s.SessionId = gr.SessionId
JOIN Student st ON gr.StudentId = st.StudentId
JOIN Course c ON st.CourseId = c.CourseId
JOIN Course_Module cm ON c.CourseId = cm.CourseId
JOIN Module m ON cm.ModuleId = m.ModuleId
WHERE
('".mysql_real_escape_string($sessionid)."' = '' OR gr.SessionId = '".mysql_real_escape_string($sessionid)."')
ORDER BY $orderfield ASC
";
Вам не нужно беспокоиться о предложении WHERE и предложении ORDER BY.Моя проблема в том, что результат запроса показывает 26 строк, когда он должен показывать 13 строк.
Я знаю причину этого, и это потому, что таблица Course_Module является таблицей перекрестных ссылок между таблицей курса и таблицей модулей и необходима для того, чтобы можно было связать между собой таблицу курса и таблицу модулей.
Но таблица курса использует CourseId для соединения с другой таблицей, как и таблица Course_Module.Таким образом, CourseId используется дважды в разделе JOINS, и поэтому он снова дублирует строки.Таким образом, должно быть 13 строк, но, поскольку каждая строка дублируется, она показывает 26.
Я попробовал GROUP BY cm.CourseId, но в итоге он отображает 2 строки, которые представляют собой два разных CourseId, что совсем не то, что мне нужно.
Так что мой вопрос в том, что я могу использовать таблицу Course_Module для JOIN-таблиц, но игнорировать ее, когда дело доходит до отображения результатов?
Если запрос был таким:
$query = "
SELECT DISTINCT gr.SessionId, t.TeacherUsername, t.TeacherForename,
t.TeacherSurname, cm.ModuleId, m.ModuleName,
cm.CourseId, c.CourseName, st.Year, st.StudentUsername,
st.StudentForename, st.StudentSurname, gr.Mark, gr.Grade
FROM Teacher t
INNER JOIN Session s ON t.TeacherId = s.TeacherId
JOIN Grade_Report gr ON s.SessionId = gr.SessionId
JOIN Student st ON gr.StudentId = st.StudentId
JOIN Course c ON st.CourseId = c.CourseId;
В этом запросе показано 13 строк, но это означает, что нет ссылки на таблицу модулей, поэтому неизвестно название модулей, взятых для каждой оценки класса.
Ниже приведен пример результата, который я получаю в данный момент.:
Student Session Module Course Grade
S1 AAA CHT2520 ICT A
S1 AAA CHT2520 ICT A
S2 AAA CHT2520 ICT B
S2 AAA CHT2520 ICT B
S3 AAB CHT2220 BIT D
S3 AAB CHT2220 BIT D
S4 AAC CHI2250 COMP A
S4 AAC CHI2250 COMP A
Это должно быть:
Ниже приведен результат, который я получаю в данный момент:
Student Session Module Course Grade
S1 AAA CHT2520 ICT A
S2 AAA CHT2520 ICT B
S3 AAB CHT2220 BIT D
S4 AAC CHI2250 COMP A
Спасибо