Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хитрый SQL ;на древовидная структуре [D5, IB6.x]


Vagrant ©   (2002-11-01 03:13:00) 

Привет! У меня такой вопрос:
Есть таблица в которой храниться дерево
ID integer
ParentID integer
Data String

Каким образом можно получить список всех детей у выбранного узла?
Причем в выборке должны присутствовать также и внуки,правнуки и т.д...


Карелин Артем   (2002-11-01 10:06:00) [1]

У меня такая же хрень.
Я сделал такой финт:
1) чуть изменил TTreeNode /Добавил идентификаторы, по которым я мог бы однозначно идентифицировать узел переменная id у ноды равна идентификатору записи ;)/. Это решило проблему поиска записи в базе, если на разных уровнях дерева и в разных местах могут быть ветки с одинаковым текстом.
2) Рекурсия у меня шла по дереву, а не базе. А в базе простой поиск по папе.
В результате достигнул очень большой скорости...

Пример такой рекурсии был на www.Ibase.ru


Кулюкин Олег   (2002-11-01 09:05:00) [2]

В IB я такое делал через хранимые процедуры.
Рекурсия, разумеется.


Vagrant   (2002-11-01 04:39:00) [3]

В оракле это возможно посредством операторов
CONNECT BY и START WITH. Вот я и думал что в Interbase тоже есть что то похожее....


Dr_Mike   (2002-11-01 03:21:00) [4]

И как же ты хочешь организовать эти рекурсивные запросы ?


Dr_Mike   (2002-11-01 03:19:00) [5]

При такой простой организации дерева есть только один способ - перебор всех записей по порядку в отсортированной по ParentID(в порядке возрастания) таблицы с одновременным ребилдингом кастового дерева


Vagrant   (2002-11-01 03:16:00) [6]

Вопрос в догонку. Поддерживает ли FireBird рекурсивные запросы?


Наверх

Титульная страница Поиск, карта сайта Написать письмо