Я задал вопрос вчера, и ответ, который я получил, ответил на первую часть моей проблемы – теперь у меня есть запрос, который генерирует список, похожий на этот:
fname, sname, uname, assignment, task, grade joe, blogs, joe.blogs, 1, 1, 52 joe, blogs, joe.blogs, 1, 2, 58 jim, blogs, jim.blogs, 1, 1, 95 jim, blogs, jim.blogs, 1, 2, 86 amy, blogs, amy.blogs, 1, 1, NULL amy, blogs, amy.blogs, 1, 2, 76
и так далее. Он берет последний класс из списка и все еще работает там, где студент не получил оценку для задания.
Далее я хочу создать таблицу, которая выглядит примерно так:
| Assignment 1 | Assignment 2 | Name |-----------------|-----------------| | Task 1 | Task 2 | Task 1 | Task 2 | =========================================== Joe.. | 52 | 58 | .. | .. | Jim.. | 95 | 86 | .. | .. | Amy.. | U | 76 | .. | .. | ...
опять же, я делал подобные вещи раньше, но я знаю, что они были ужасно неэффективными. В идеале я хотел бы иметь возможность создавать эту таблицу с одним проходом массива.
То, что вам нужно сделать, это добавить столбцы, пока вы повторяете строки. Возможно, сначала выполнить небольшой запрос, выбрав столбцы:
SELECT * FROM assignment_tasks ORDER BY Assignment_ID ASC, Task_ID ASC;
Затем адаптируйте запрос на загрузку массива, который вы описали, для заказа пользователем, назначения, задачи. Таким образом, значения в массиве находятся в том же порядке, что и в таблице (строка за строкой, слева направо). Если значение отсутствует (или NULL, не имеет значения), напечатайте U.
Конечно, это связано с предположением о том, что количество назначений и задач невелико по сравнению с количеством записей в массиве.
Взгляните на group by
статье. Я лично не использую его, потому что обнаруживаю, что мне все же приходится заканчивать работу над результатами, созданными для создания вложенного массива, как я хочу, но это может быть то, что вы ищете. Вот ссылка, которая использует суммы, поэтому она не идеальна, но она показывает вам немного больше информации о SQL.