Сложности с построением дерева. Прошу помощи.
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-запрос?
Может быть я вообще копаю не в том направлении? Подскажите, пожалуйста, как мне лучше решить мою задачу.
- Сложности с построением дерева. Прошу помощи., anthrop 21.04.2006 19:08