parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Сложности с построением дерева. Прошу помощи.

anthrop 21.04.2006 19:08

Добрый день.

Дано:
БД по недвижимости с такими (примерно) таблицами:

Таблица "Помещения" - поля:
ID, ID_здания, площадь, цена

Таблица "Здания" - поля:
ID, ID_станции_метро, тип_здания

Таблица "Метро" - поля:
ID, ID_района, название

Таблица "Районы" - поля:
ID, название

Задача:
Извлечь из этих таблиц данные о помещениях, соответствующих запросу, и положить их в XML примерно такого вида:

<РЕЗУЛЬТАТЫ>
<МЕТРО name="Академическая">
<здание n="1">
<помещение></помещение>
<помещение></помещение>
<помещение></помещение>
</здание>
<здание n="2">
<помещение></помещение>
<помещение></помещение>
</здание>
</МЕТРО>
<МЕТРО name="Бабушкинская">
<здание n="3">
<помещение></помещение>
<помещение></помещение>
<помещение></помещение>
</здание>
<здание n="4">
<помещение></помещение>
<помещение></помещение>
</здание>
</МЕТРО>
</РЕЗУЛЬТАТЫ>

Запрос, который отбирает нужные помещения, задействует все таблицы БД (условия отбора касаются и районов, и метро, и зданий, и помещений).
На сегодняшний день задача решается без использования XML. Просто всё выбирается в большую таблицу с такими полями:
ID, площадь, цена, тип_здания, название метро.
Вся эта таблица кое-как выводится.

Какие возникли вопросы:
В примере с форумом есть возможность начать "сверху" - выбрать корневые сообщения и плясать от них. Дальше можно выбирать все сообщения данного родителя и т.д. Я же этой возможности не имею по двум причинам:
1) Мне не нужны все станции метро в данном районе. Нужны только те, к которым относятся помещения с заданной площадью и ценой.
2) Мне не нужны все помещения в данном здании и т.д.

Я могу доставать всю нужную информацию одним SQL-запросом с многочисленными join'ами (что сейчас и происходит). Что только мне потом делать с полученной таблицей?
Доставать из неё все уникальные станции метро, потом пробегать по полученной таблице и доставать здания для каждой станции, потом для каждого здания его помещения? А как в таком случае лучше доставать уникальные значения полей?

Что подразумевается в документации под этими словами:
$.distinct[tables]
создать хеш из таблиц, содержащих строки с ключом.

Может быть это именно то что мне надо?

Что быстрее - выбирать из готовой таблицы с результатами поиска средствами Parser'а или дать ещё один SQL-запрос?

Может быть я вообще копаю не в том направлении? Подскажите, пожалуйста, как мне лучше решить мою задачу.