Forum Webscript.Ru

Общие => Базы данных => Тема начата: lbpf от 24 Ноября 2003, 11:59:17

Название: как найти всех родителей в дереве
Отправлено: lbpf от 24 Ноября 2003, 11:59:17
Есть таблица

id int,  -- порядковый номер
parent int,  -- номер родителя в этой же таблице
name varchar(50)

Нужно строить "путь" (выбора всех родителей в дереве) заданной ветки ввиде строки, вроде

"Книги > Пушкин > Сказки > Сказка о рыбаке и рыбке"

тогда когда задан id от "Сказка о рыбаке и рыбке".

Подскажите решение, база M$ SQL
Название: как найти всех родителей в дереве
Отправлено: lbpf от 25 Ноября 2003, 05:39:51
Вот нашел вариантец в инете для решения данной задачи и немного его доделал. При вызове функции в  @ID пишем номер элемента для которого надо найти всех родителей.
У самого старшего родителя parent=0.
На выходе в select-е получаем отсортированную по убыванию уровней таблицу, вида:
id, name, level



CREATE PROCEDURE   GetParentTree @ID int
AS  
BEGIN
             declare  @r table( id int, name varchar(50), level int)
             declare @Ret int
             declare @Level int
             declare @Parent int
             declare @name varchar(50)

             set @level=1
select @Ret = [ID], @Parent = Parent, @name=name
from categories where [ID] = @ID
              insert into @r (id,  name, level) values (@Ret, @name, @level)
             set @level=@level+1

while @Parent <> 0 begin
select @Ret = [ID], @Parent = Parent, @name=name
from categories where [ID] = @Parent
             insert into @r (id,  name, level) values (@Ret, @name, @level)
             set @level=@level+1
end
select *   from  @r order by level DESC
END
GO