Вопрос по деревьям

Brioni

Новичок
Вопрос по деревьям

Небходимо сделать каталог продукции вида:

Категория 1 -> Категория 2 -> Категория 4
Категория 3 -> Категория 6 -> Категория 7 -> Категория 4
Категория 8 -> ..

Сложность в том, что часть категорий могут иметь несколько родительских категорий (см. категорию 4). Возможно ли реализовать такое дерево, не используя рекурсивную функцию? Как?

Подскажите, пожалуйста.
 

Макс

Старожил PHPClub
зайди в форум "ИЗБРАННОЕ" и найди там тему про деревья
 

Kelkos

Сам себе программер
Реализовать, конечно можно, но чем тебе рекурсия не нравится?
Посмотри ниже по форуму.. тут обсуждались фактически готовые решения для создания меню.
----------
P.S. если надумаешь делать с рекурсией теляй.. есть у меня пара готовых скриптов включая редактор структуры. (только вот пока скрипт вывода меню не написал ещё, но это уже мелочи)
 

Kelkos

Сам себе программер
Необоснованно дорогим извлечением дерева из базы.
Дык нам его извлекать то надо только при первом посещении.. после чего прописываем его в ссесию и готово.
Дальше.. как это меню будет выводиться? Если в качестве меню будет постоянно болтаться ВСЁ дерево в java менюшке, то применяем вышеописанный метод, а ели развёрнутым виден только выбранный раздел, то вообще прекрасно! Учитывая условие "часть категорий могут иметь несколько родительских категорий " лучше не в "листьях" сделать метку на родительский пункт, а в каждом элементе меню держать список id его "листьев" . (это топорный метод)..
------------------------
Crazy, может всё таки ты и прав.. и все эти извраты с рекурсией - это попытка почесать левой ногой правое ухо.. ;)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: Вопрос по деревьям

Автор оригинала: Brioni
Сложность в том, что часть категорий могут иметь несколько родительских категорий
Такая структура уже не называется деревом.
 

Brioni

Новичок
Предположим у меня категории:
Мебель -> Офисная мебель -> Компьютерные столы -> Артикулы
Мебель -> Домашняя мебель -> Компьютерные столы -> Артикулы

Вижу 2 варианта решения:
1. Создание дерева (Nested Sets), в котором "Компьютерные столы" два различных элемента (2 записи). А товар (артикул) привязывается (через табличку связи) к любому количеству категорий. Минусы очевидны: два одинаковых раздела.
2. Создание всей структуры через таблицу связи. Тогда возможны любые комбинации. Но вывод с помощью рекурсии и тормоза, особенно при большом ассортименте.
Или может есть еще варианты?

PS: или еще пример http://www.ozon.ru/context/book_catalog_list/catalog/12256/
К книгам по базам Access можно выйти как через раздел "MS Office. Офисные программы Майкрософт", так и через "Базы данных".
Там, значит, уже не дерево?
 

Screjet

Новичок
Originally posted by Brioni
Предположим у меня категории:
Мебель -> Офисная мебель -> Компьютерные столы -> Артикулы
Мебель -> Домашняя мебель -> Компьютерные столы -> Артикулы
Добавляется третий элемент: ссылка.
..Правда чтоб прочесть в мускуле такую ссылку нужно два запроса к бд.
 
Сверху