Forum Webscript.Ru

Общие => Базы данных => Тема начата: ekeeper от 26 Октября 2005, 14:51:27

Название: Nested Sets проблема с деревьями. ОЧЕНЬ СРОЧНО
Отправлено: ekeeper от 26 Октября 2005, 14:51:27
Типа вот статейка
http://www.webscript.ru/stories.php3?story=04/09/01/8197045

Там все круто написано конечно, но кое чего не хватило.

Задача:
Есть дерево, все хорошо.
Надо найти все узлы у которых нет производных (детей)
Для каждого надо найти родительскую ветку (написано в статье), ИЛИ хоть ОДНОГО первого родителя.
Мне надо составить ниспадающий список из этих веток (путей)

пример:

/
-1
--1
--2
----1
--3
---1
-----1

надо получить список из строк:
/ -> 1 -> 1
/ -> 1 -> 2 -> 1
/ -> 1 -> 3 -> 1 -> 1

Подскажите, как такое сделать? Желательно одним запросом, ну или двумя... %((((

Как я делал.
1. Выбирал все id узлов какие есть.
2. В цикле для каждого найденого смотрел ветку которую этот элемент порождает - если ветка из одного элемента (из самого этого узла), значит у него нет детей и это искомый
3. Для всех найденых узлов в пункте 2. применяю запрос из статьи по котороу высчитывается родительская ветка

на 3м пункте падает апач из-за кучи обращений к базе...
надо сократить кол-во запросов...

ПАМАЖИТЕ!!!!
Название: Nested Sets проблема с деревьями. ОЧЕНЬ СРОЧНО
Отправлено: Макс от 26 Октября 2005, 17:53:59
У узлов без детей разница между right и left всегда равна единице.

Насчет решения твоей задачи, ИМХО можно оставить тот вариант который у тебя, только 2-ой пунтк упростить.

3-ий пункт тоже можно упростить, но получиться много кода на ЯП и куча работы с массивами