Загрузка данных из БД ввиде дерева.

ONK

Пассивист PHPСluba
Кажется это первый ПХП код безрекурсивной выборки бинарного дерева который я видел (помимо своего). Ещё немного доработать и будет юзабильный инструмент.
Вобщем движение в правильном направлении...
 

Vallar_ultra

Любитель выпить :)
ONK
ээээ, да эти алгоритмы уже лет 40 назад придуманы были... если не больше. И это далеко не открытие.
 

BeGe

Вождь Апачей, блин (c)
ONK странно а такие слова как Nested Sets уже в институте не говорят ? - йопта открытие.........

Матчасть читать по слогам =)
 

Vallar_ultra

Любитель выпить :)
dark-demon
почитай о том что такое рекурсия и как работает, ок?

ONK
я даже задом на перед могу прочитать - толку никакого. Если ты не видел на ПеХаПе реализаций простейших алгоритмов - это вобщем твоя проблема. Хамить при этом крайне не желательно.
 

ONK

Пассивист PHPСluba
Vallar_ultra, я не хамил, в моём посте нет слова алгоритм, однако, если мне кинут ссылку тему, где уже обсуждалась полноценная реализация безрекурсиной выборки и построения из базы данных дерева со связями типа id -> parent_id, я буду благодарен.
А то примитивный алгоритм есть, а все почемуто для построения такого дерева делают рекурсивные SQL запросы.
 

riff

Новичок
Интересно, все эти люди со мной разговаривают?

Ничего себе... две недели без единого сообщения, а тут за ночь уже успели поспорить.
Теперь разобраться бы о чём спор: я придумал то, что уже было придумано? или лучше по другому делать?

-~{}~ 18.04.07 09:10:

ой, получилось так, что я почти процитировал сообщение выше.
 

ONK

Пассивист PHPСluba
dark-demon, если кратко, то для выборки и построения такого дерева обычно используется рекурсивное составление sql запросов и их выполнение непосредственно в процессе построения дерева. На выборку каждого уровня, каждой отдельной ветки требуется новый SQL запрос.
Для построения среднестатистического дерева в 200 элементов может понадобиться 50 - 70 sql запросов. Много это или нормально для выполнения одного действия каждый решает сам.
 

BeGe

Вождь Апачей, блин (c)
ONK проще выбрать всё дерево одним запросом и потом рекурсино обойти массив данных чем. Сейчас проблемы с деревом отпдают при теперешнем развитии AJAX технологий.
 

Vallar_ultra

Любитель выпить :)
BeGe
При чем AJAX к структурам данных вообще, и к деревьям в частности?
 

ONK

Пассивист PHPСluba
BeGe, по первой половине вопроса, об этом и дёт речь, просто при рассматриваемом способе хранения дерева в БД с этим у народа всегда возникали трудности. Рассматриваемый код является шагом к решению этих трудностей.
По второй половине вопроса, извини, но это видимо очень личное, я ничего не понял. ;) Деревья нужны не только для их отображения в браузере клиента.
 

dark-demon

d(^-^)b
ONK, предложенный алгоритм от рекурсии и не спасает. сейчас там выбираются все строки, а потом из них строится дерево. и уже в полученном дереве мы можем выделить нужную нам ветвь.
Много это или нормально для выполнения одного действия каждый решает сам. :)
да и насчёт полтинника запросов ты загнул - можно выбирать данные каскадно по уровням вложенности.
 

Vallar_ultra

Любитель выпить :)
dark-demon
>да и насчёт полтинника запросов ты загнул - можно выбирать данные каскадно по уровням вложенности.

А не проще ли взять 1-м запросом и на лету распихивать в нужную тебе стр-ру?
 

ONK

Пассивист PHPСluba
dark-demon, если предполагается необходимость выборки отдельных веток, векторов, путей, надо использовать более оптимальные методы хранения структуры дерева. Например тот-же NS или предпочитаемая мною дополнительная таблица связей.
 

riff

Новичок
dark-demon
предложенный алгоритм от рекурсии и не спасает. сейчас там выбираются все строки, а потом из них строится дерево. и уже в полученном дереве мы можем выделить нужную нам ветвь.
Если я правильно понял мысль, ты имеешь ввиду, что после создания дерева, нужно не само это дерево, а лишь какая-то ветка с еёнными подветками или быстренько найти какую-то ветку? Тогда опять же не нужна рекурсия, а достаточно чуть-чуть расширить функцию и возвращать второй(он же основной) массив. Там все ветки выстроены в линию и пробежаться по ним можно циклом.
 
Сверху