Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-35875
Ferrari_the_best
2002-08-18 03:10
2002.09.12
Help a нужна!!!!!!!!!!!!!!!!!!!!


3-35621
NIKI
2002-08-20 16:27
2002.09.12
CheckListBox


3-35574
demisen
2002-08-21 14:17
2002.09.12
Размер секции в отчете (QuickReport)


8-35820
SAM A Panteleev
2002-04-30 22:02
2002.09.12
Серьезная задача для умных людей


4-35945
eruc
2002-07-21 18:36
2002.09.12
Drag & Drop ??? what ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский