У меня некоторое время была такая же проблема с sql, и когда я сижу, чтобы написать тот же самый взлом "грубой силы", который я всегда использую, я думаю, что ДОЛЖЕН быть более эффективный способ сделать то, что я хочу сделать .
У меня есть таблицы, подобные этой:
grades(gradeID, taskID, grade, username, date)
tasks(taskID, task...)
assignment(assignmentID, title...)
assignment_tasks(assignmentID, taskID)
assignment_students(assignmentID, username)
students(username, forename...)
последние 5 таблиц довольно статичны, настроены один раз и в основном оставлены в покое.
для таблицы оценок, новая запись создается каждый раз, когда для задачи вводится новая оценка.
Я хочу создать сводную таблицу для задания, которая может состоять, скажем, из 5 заданий, и у каждого учащегося может быть любое количество оценок для каждого задания, причем самым последним является тот, который я хочу отобразить в сводке .
Что я обычно делаю, это запрашиваю список учеников и список заданий, а затем строю гигантское гнездо для циклического циклического прохождения каждого задания для каждого ученика, запрашивая самую свежую оценку для каждого, предполагая, что 30 учеников , 5 заданий, это 152 запроса, что всегда показалось мне слишком большим.
Я полагаю (надеюсь), что у меня ужасно неловкий пробел в моих знаниях sql, и есть гораздо более умный способ сделать это.
Edit:
Спасибо за ответ - я все еще работаю над созданием фактической базы данных, чтобы проверить ее, но я подозреваю, что приведенный ниже ответ не охватывает следующие проблемы:
если учащийся не пытался выполнить задание / задание, в таблице оценок для него не будет записей, но они все равно должны отображаться в сводной таблице с оценкой по умолчанию для каждого задания («и»). , Я думаю, что это немного усложняет.
Снова отредактируйте:
У меня сейчас есть база данных эмбрионов, и она работает так, что я получаю список самых последних оценок с пробелами, в которых нет оценок. Перенос этого списка теперь является предметом другого вопроса !