Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Каталог с бесконечной вложенностью категорий
 
 автор: hammet   (20.06.2007 в 15:33)   письмо автору
 
 

Возник вопрос реализации каталога с бесконечной вложенностью категорий. А именно организация структуры таблиц БД и выборки.
У меня есть один вариант:
categories: id, name, description, parent, level
где parent - id родителя, level - запись вида 1.7.14 (как параграфы в книгах).
Это как бы путь от корня к текущей категории...т.е. список id через точку.
Идея есть, но как потом это парсить и делать выборку чтобы в итоге получить дерево?
Напрашивается рекурсивная ф-я, но пока точно не придумал как это реализовать, может кто то подскажет?
Спасибо

   
 
 автор: Trianon   (20.06.2007 в 15:54)   письмо автору
 
   для: 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

   
 
 автор: hammet   (20.06.2007 в 17:11)   письмо автору
 
   для: Trianon   (20.06.2007 в 15:54)
 

Спасибо, Trianon, Вы хороший учитель :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования