Forum Webscript.Ru
Общие => Базы данных => Тема начата: lbpf от 24 Ноября 2003, 11:59:17
-
Есть таблица
id int, -- порядковый номер
parent int, -- номер родителя в этой же таблице
name varchar(50)
Нужно строить "путь" (выбора всех родителей в дереве) заданной ветки ввиде строки, вроде
"Книги > Пушкин > Сказки > Сказка о рыбаке и рыбке"
тогда когда задан id от "Сказка о рыбаке и рыбке".
Подскажите решение, база M$ SQL
-
Вот нашел вариантец в инете для решения данной задачи и немного его доделал. При вызове функции в @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