Общие > Базы данных

как найти всех родителей в дереве

(1/1)

lbpf:
Есть таблица

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

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

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

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

Подскажите решение, база M$ SQL

lbpf:
Вот нашел вариантец в инете для решения данной задачи и немного его доделал. При вызове функции в  @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

Навигация

[0] Главная страница сообщений

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии