Автор Тема: как найти всех родителей в дереве  (Прочитано 2287 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lbpf

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 26
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как найти всех родителей в дереве
« : 24 Ноября 2003, 11:59:17 »
Есть таблица

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

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

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

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

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

Оффлайн lbpf

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 26
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как найти всех родителей в дереве
« Ответ #1 : 25 Ноября 2003, 05:39:51 »
Вот нашел вариантец в инете для решения данной задачи и немного его доделал. При вызове функции в  @ID пишем номер элемента для которого надо найти всех родителей.
У самого старшего родителя parent=0.
На выходе в select-е получаем отсортированную по убыванию уровней таблицу, вида:
id, name, level



CREATE PROCEDURE   GetParentTree 
@ID int
AS  
BEGIN 
             
declare  @r tableid intname 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 
@(id,  namelevelvalues (@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 
@(id,  namelevelvalues (@Ret, @name, @level)
             
set @level=@level+1
	
end
select 
*   from  @r order by level DESC
END
GO
« Последнее редактирование: 25 Ноября 2003, 05:52:51 от lbpf »

 

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