![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хитрый 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 рекурсивные запросы?