Форум: "Базы";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизВопрос о деревьях Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c