Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

Народ подскажите!   Найти похожие ветки 

 
River   (2003-01-22 14:50) [0]

есть табличка подразделений
create table division
(
division_id number not null,
division_name varchar2(100),
division_parent_id number
);
alter table division
add costraint pk_division_id primary key (division_id);
alter table division
add constraint fk_division_parent_id foreign key (division_parent_id)
references division (division_id);

ну и вот добавляем туды записи, к примеру у нас есть такая иерархия подразделений:
НБРК
- Центральный Аппарат
- Департамент Монетарных Операций
- Управление 1
- Управление 2
- Департамент Информационных Технологий
- Управление 3
- Управление 4
ККБ
- Центральный Аппарат

в нашей табличке мы их вписываем так:
division_id division_name division_parent_id
1 НБРК
2 Центральный Аппарат 1
3 Департамент Монетарных Операций 2
4 Департамент Информационных Технологий 2
5 Управление 1 3
6 Управление 2 3
7 Управление 3 4
8 Управление 4 4
9 ККБ
10 Центральный Аппарат 9

т.о. мы прослеживаем иерархию, хотя иерархия может быть очень глубокой, но это не суть важно
теперь я хочу вытащить подразделения ко-е входят в состав НБРК, заметь, что структура внутри может меняться. Приходится писать функцию, ко-я проверяет входит ли очередное подразделение в состав нужного и т.д.
select *
from division a
where is_division_in_my_division(a.division_id, 1/*номер подразделения НБРК*/) = true
такой запрос выполняется очень долго, если таблица большая, поскольку на каждой записи происходит вызов функции, в свою очередь функция лезет в эту же таблицу. Долго очень! :-(
на оракле это просто:
select *
from division
connect by prior division_id = division_parent_id
start with division_id = 1
удобно и быстро.
может есть какие-нибудь команжды в Interbase для этих целей?


 
River   (2003-01-22 16:20) [1]

подскажите кто нить?*


 
Max Zyuzin   (2003-01-22 17:13) [2]

Я сам не занимался подобными приколами... но на сайте королевства есть статейка...
http://www.delphikingdom.com/helloworld/dbtreeview.htm
Может она тебе поможет.


 
Sergey Masloff   (2003-01-22 23:17) [3]

спец. функций типа connect by нету. Пиши рекурсивную процедуру... По скорости нормально будет.


 
Jeer   (2003-01-22 23:38) [4]

Если допустимо вытаскивать часть логики на клиента, то можно заносить инфу в TTreeView и делать рекурсивный обход, начиная с node i.
Получив список id, далее:
where id in (...)


 
Sergey13   (2003-01-23 11:36) [5]

Если головных узлов много, то можно попробовать добавить еще одно поле со ссылкой на "головного" родителя, и тем существенно сузить поиск детей.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
6-28956
ДенМат
2002-12-18 08:56
2003.02.10
DNS, PROXY


9-28574
Armageddon
2002-08-31 11:08
2003.02.10
Графика


14-29054
ЮРИЙ_К
2003-01-24 15:56
2003.02.10
Компонент для создания Слайд-шоу


14-29055
Adolf
2003-01-22 17:00
2003.02.10
Системные требования


6-28976
pavlov
2002-12-19 17:32
2003.02.10
Сокеты - синхронный режим





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский