Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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м пункте падает апач из-за кучи обращений к базе...
надо сократить кол-во запросов...
ПАМАЖИТЕ!!!!
-
У узлов без детей разница между right и left всегда равна единице.
Насчет решения твоей задачи, ИМХО можно оставить тот вариант который у тебя, только 2-ой пунтк упростить.
3-ий пункт тоже можно упростить, но получиться много кода на ЯП и куча работы с массивами