Вниз
Скачать: CL | DM;

Вопрос о деревьях   Найти похожие ветки 

← →
dim- ©   (2002-08-22 23:48) [0]

Народ помогите с реализацией запроса по выборке всех потомков в ветке дерева.
Есть таблица (id,bos,name), стандартная реализация дерева, как выбрать всех потомков, структуру менять нельзя.
Просьба не отсылать на статьи про деревья, уже читал, желательно помочь примером.


← →
wicked ©   (2002-08-23 00:05) [1]

помогу обьяснением "на пальцАх", так как над темой немного размышлял... :)
создаём хранимую процедуру, которая должна будет выбирать во временную табличку id тех элементов, поле bos которых будет указывать на заданный родительский элемент... например

insert #temp_table (id)
select id from tbl where bos = @id

где @id - id заданного родительского элемента...
затем повторяем запрос вида

insert #temp_table (id)
select id from tbl t
where exists (select id from #temp_table t2 where t2.id = t.bos)
and not exists (select id from #temp_table t2 where t.id = t2.id)

до тех пор, пока @@rowcount не будет равным 0 (я опираюсь на то, что ты указал mssql)...
то есть, в общем это будет вылядеть примерно так

create proc get_all_children @id int
as begin
set nocount on -- спорно, надо глянуть,
-- будет ли срабатывать @@rowcount
set ansi_warnings off

insert #temp_table (id)
select id from tbl where bos = @id
while @@rowcount <> 0
insert #temp_table (id)
select id from tbl t
where exists (select id from #temp_table t2
where t2.id = t.bos)
and not exists (select id from #temp_table t2
where t.id = t2.id)
end

в общих чертах так.... за замеченные ошибки (логические) просьба ногами не пинать - больно... :)


← →
dim- ©   (2002-08-23 10:21) [2]

Спасибо, это работает, но оно выдает всех потомков просто скопом, а как можно сформировать их в виде иерархии для отчета, т.е.:
id родитель1
id дети1
id дети1
id родитель2
id дети2
id дети2
....


← →
SergSuper   (2002-08-23 10:27) [3]

Можно посмотреть здесь
http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=5659
или здесь
http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=10197
или здесь
http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=1701

Но в принципе это несложная задача и если человек работает с БД он должен её решать сам


← →
Hro ©   (2002-08-23 10:31) [4]

Добавь во временную таблицу еще и поле bos, а при выводе индексируй по нему



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-35791
koly01
2002-08-31 17:06
2002.09.12
TService


14-35903
Constanta
2002-08-19 12:20
2002.09.12
Помогите найти нормально работающий компонент для DDE!


6-35845
budhha
2002-07-06 13:44
2002.09.12
ARP подмена


14-35852
Vahmurka
2002-08-16 11:32
2002.09.12
Знаетее, что меня больше всего бесит?


1-35645
Starkom
2002-08-30 11:28
2002.09.12
Можно ли использовать в C++ Buildere 5 модули из Delphi 5?




   Наверх