Вниз
Скачать: 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.01 c
14-35903
Constanta
2002-08-19 12:20
2002.09.12
Помогите найти нормально работающий компонент для DDE!


3-35564
mas_alexey
2002-08-21 19:11
2002.09.12
Триггер в ISQL


3-35609
ShuraGrp
2002-08-22 16:28
2002.09.12
TDataSet.Open приводит к тому, что все поля Visible = false


14-35878
Юрий Зотов
2002-08-18 15:43
2002.09.12
Информация - новый пример в кладовке.


14-35888
limon
2002-08-16 15:42
2002.09.12
CLIPPER и быстрые процессора




   Наверх