|
|
|
| Возник вопрос реализации каталога с бесконечной вложенностью категорий. А именно организация структуры таблиц БД и выборки.
У меня есть один вариант:
categories: id, name, description, parent, level
где parent - id родителя, level - запись вида 1.7.14 (как параграфы в книгах).
Это как бы путь от корня к текущей категории...т.е. список id через точку.
Идея есть, но как потом это парсить и делать выборку чтобы в итоге получить дерево?
Напрашивается рекурсивная ф-я, но пока точно не придумал как это реализовать, может кто то подскажет?
Спасибо | |
|
|
|
|
|
|
|
для: hammet
(20.06.2007 в 15:33)
| | что нибудь одно :)
либо id, parent_id (Adjacency lists - список смежности)
либо path (Matherialized paths - материализованные пути)
либо left_bnd, right_bnd (Nested sets - вложенные множества)
эти три - основные методики хранения деревьев в таблицах реляционных БД.
Вы же смешали первую со второй.
Если нужен обход в глубину:
при первом способе без рекурсии не обойтись. Хотя при относительно небольшой структуре дерева (порядка до тысячи - десятка тысяч узлов) случаев можно обойтись без множественных запросов на шагах рекурсии.
при втором способе - и правильном хранении пути - данные из базы достаются одним запросом в порядке ORDER BY path.
при третьем - тоже самое - ORDER by left_bnd.
По теме: http://phpclub.ru/faq/wakka.php?wakka=Tree&v=w5u | |
|
|
|
|
|
|
|
для: Trianon
(20.06.2007 в 15:54)
| | Спасибо, Trianon, Вы хороший учитель :) | |
|
|
|