Показать сообщение отдельно
Старый 12.10.2004, 17:36   #73  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Хехе... А ведь таким образом можно выполнять практически любые задачи, связанные с обработкой и траверсированием древовидных структур:

Получение всех родителей текущего элемента дерева:

<div class='XPPtop'>X++</div><div class='XPP'>Classif cur;
...
[color=:blue]int[/color] n = cur.level;
...
Classif parent[ n - 1 ];

[color=:blue]select[/color] parent[ 1 ] [color=:blue]where[/color] parent[ 1 ].Id [color=:blue]==[/color] cur.ParentId
join parent[ 2 ] [color=:blue]where[/color] parent[ 2 ].Id [color=:blue]==[/color] parent[ 1 ].ParentId
...
join parent[ n - 1 ] [color=:blue]where[/color] parent[ n - 1 ].Id [color=:blue]==[/color] parent[ n - 2 ].ParentId;</div>

Получение всех детей текущего элемента получается модификацией фрагмента из поста выше, а именно:

<div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]int[/color] n = ([color=:blue]select[/color] max( level ) [color=:blue]from[/color] Classif).level - cur.level;

Classif c[ n ];

[color=:blue]select[/color] c[ 1 ] [color=:blue]where[/color] c[ 1 ].ParentId [color=:blue]==[/color] cur.Id
[color=:blue]outer[/color] join c[ 2 ] [color=:blue]where[/color] c[ 2 ].ParentId [color=:blue]==[/color] c[ 1 ].Id
...
[color=:blue]outer[/color] join c[ n ] [color=:blue]where[/color] c[ n ].ParentId [color=:blue]==[/color] c[ n - 1 ].Id</div>

Полная выборка элементов с подэлементами уже описана.
Ну и т.д....