Возврат нескольких строк в строке (в Zend Framework) - PullRequest
1 голос
/ 21 мая 2009

У меня есть база данных 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, который позволяет мне назначить набор строк для набора строк

Пожалуйста, дайте мне знать, если я нигде не ясно, и спасибо заранее.

(скрестив пальцы, чтобы это не заканчивалось на ежедневной сессии ...)

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Я столкнулся с множеством проблем с использованием классов абстракции базы данных Zend Frameworks, когда мне приходится работать с данными из нескольких таблиц. Количество выполненных запросов и накладные расходы на все сгенерированные объекты поставили мой хост-сервер на колени. С тех пор я вернулся к написанию запросов для сбора всех своих данных, а затем к просмотру данных для построения моего дисплея. Это не красиво или не так, как использование слоев абстракции, но и не выводит мою страницу PHP-скриптов на диск только для отображения таблицы, полной данных.

Поскольку Стив упоминает эталонный тест любого решения, которое у вас получилось, я бы также профилировал использование вашей памяти.

1 голос
/ 21 мая 2009

Вы можете справиться с этим сценарием, используя функции взаимосвязи таблицы Zend_Db_. Вам нужно будет создать классы обертки таблиц для сессий, дат, курсов и т. Д., Если вы используете Zend_ Db_ Aadpter для ваших запросов в настоящее время.

http://framework.zend.com/manual/en/zend.db.table.relationships.html

Он не слишком отличается от подхода, описанного вами для запроса каждого набора данных в отдельности, но дает вам прямой интерфейс OO для извлечения соответствующих связанных данных для данной записи.

Если вы пойдете по этому пути, вы захотите провести некоторый бенчмаркинг, поскольку он потенциально может выполнить много запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...