Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.12;
Скачать: 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 вся ветка

Текущий архив: 2002.09.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
3-35597
Jony
2002-08-22 10:33
2002.09.12
Создание полей в DataSet и связанных с ними элементов в RunTime


1-35699
bbp
2002-09-02 16:34
2002.09.12
Приведение типов


1-35734
AFROLOV
2002-08-30 12:34
2002.09.12
Как передать интерфейс в качестве параметра?


1-35706
Bill
2002-09-02 17:40
2002.09.12
Помогите начинающим


7-35935
Kostia
2002-07-02 08:50
2002.09.12
Прошу прощения за глупый вопрос...