Выборка из дерева без рекурсии

HeavyNatas

Новичок
Выборка из дерева без рекурсии

Есть таблица содержащая дерево

колонки:

id - примари кей
name - имя
RB - граница cправа
LB - граница слева
parent - ссылка на родителя

Вопрос: как одним нерекурсивным (!) запросом вывести ветку дерева ?
 

HeavyNatas

Новичок
Вообщем. Сделать таблицу, содержащую дерево.

Например.
Страна - Область - Район - Город...
Нужно получить ветку одним запросом.

Рекурсию использовать нельзя. Вот.
 

HeavyNatas

Новичок
for MakS
LB , RB - это границы вложенности
т.е. показывает на каком уровне находится объект в таблице
например Вот такое дерево как
Страна-Область-Район.
то в строке Страна
LB = 0;
RB = 2
Страна-Область-Район-город.
в строке область
LB = 1;
RB = 2;

LB b RB обрабатывает триггер
 

Макс

Старожил PHPClub
какой еще триггер в mysql ? Или у тебя mysql5 ?
В общем случае все дерево плучить нельзя (правда я не знаком с функциональностью mysql5).
 

jonjonson

Guest
Что значит вывести ветку дерева? Я так понимаю, что это найти всех предков узла являющегося листом.
[SQL]
SELECT *
FROM my_table AS table1, my_table AS table2
WHERE table2._left BETWEEN table1._left AND table1._right AND
table2._right BETWEEN table1._left AND table1._right AND
table2.id = $CurentNodeId;
[/SQL]
Вот только не знаю, есть ли в MS SQL 2000 конструкция BETWEEN
 

Макс

Старожил PHPClub
jonjonson
этот запрос сработает для структуры nested sets.
А у него id -> parent_id
 

jonjonson

Guest
Макс, меня смутило, что у него какие-то там границы RB и LB. Собственно каша какая-то.

HeavyNatas, если хочешь без рекурсии, то создавай отдельно табличку для избыточной информации, а именно для хранения всех предков для каждого узла дерева :)
 

maxim

Новичок
Поищи в инете статью по фамилии Celko Целко
и nested sets
Он как раз про это писал и пишет
Примеры там для МС СКЛ
 
Сверху