У меня есть база данных MySQL, содержащая эти таблицы:
sessions
--------
sessionid (INT)
[courseid (INT)]
[locationid (INT)]
[comment (TEXT)]
dates
-----
dateid (INT)
sessionid (INT)
date (DATE)
courses
-------
...
locations
---------
...
Каждый сеанс имеет уникальный идентификатор сеанса, а каждая дата имеет уникальный дату. Но даты не обязательно имеют уникальный идентификатор сеанса, поскольку сеанс может охватывать переменное число дат (не обязательно последовательных).
Выбор каждой полной строки - это просто вопрос объединения таблиц в sessionid. Однако я ищу способ вернуть набор строк для определенного идентификатора курса, где каждая строка в этом наборе строк представляет местоположение и содержит другой набор строк, каждый из которых содержит один сеанс, который, в свою очередь, содержит другой набор строк, который содержит все даты этой сессии:
course
location
sesssion
date
date
session
date
date
date
location
...
Это потому, что я использую запросы к этой базе данных из PHP, используя Zend Framework, который имеет отличный интерфейс для манипулирования строками и наборами строк объектно-ориентированным способом.
В конечном итоге я пытаюсь вывести «расписание» для представления, упорядоченного сначала по курсу, затем по месту, затем по дате. В идеале я мог бы выполнять итерацию по каждой строке в качестве местоположения, а затем для каждого местоположения, итерацию по каждому сеансу, а затем для каждого сеанса итерацию по каждой дате.
Я думаю сделать это, запрашивая все местоположения, сессии и даты отдельно. Затем я преобразовал бы каждый набор строк в массив и добавил каждый массив сессий в качестве члена массива местоположений, а также добавил каждый массив дат в качестве члена массива сессий.
Это, однако, кажется очень тупым и не дает мне возможности обрабатывать строки объектно-ориентированным образом.
Мне было интересно, было ли либо:
а) лучшая схема таблицы для представления этих данных;
b) SQL-запрос, о котором я не знаю;
в) метод в Zend_Db, который позволяет мне назначить набор строк для набора строк
Пожалуйста, дайте мне знать, если я нигде не ясно, и спасибо заранее.
(скрестив пальцы, чтобы это не заканчивалось на ежедневной сессии ...)