|
Деревянные списки
|
|||
---|---|---|---|
#18+
Здравствуйте! Возможно проблема была ранее обсуждена на форуме, - тогда спасибо за ссылку, но в любом случае не могу решить следущую задачу: Имеем таблицу, описывающюю дерево подразделений предприятия : ID, PARENT_ID, LEV - собственно id, ссылка на родитель-подразделение на уровень выше, уровень вложенности подразделения в дереве. Необходимо по заданному id выдать набор этих самых id всех входящих в заданное подразделение подразделений. Поля: ID,PARENT_ID,LEV 1 NULL 1 - Предприятие 2 1 2 - Цех 1 3 1 2 - Цех 2 4 2 3 - Отдел Цеха 1 5 3 3 - Отдел Цеха 2 6 5 4 - Подотдел Отдела Цеха 2 т.о. задав id = 1 должны получить список id 1,2,3,4,5,6 задав id = 3 -> 3,5,6 Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2002, 06:27 |
|
Деревянные списки
|
|||
---|---|---|---|
#18+
Так бери алгоритм обхода дерева, делай стек - временную таблицу (куда будут писаться найденные узлы), и вперед.. я не знаю, но возможно в какой-нибудь книжке типа Вирт "алгоритмы и структуры данных" есть готовый пример на паскале. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2002, 06:44 |
|
Деревянные списки
|
|||
---|---|---|---|
#18+
select id from таблица start with id=подразделение connect by prior id=parent_id или я что не так понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2002, 07:49 |
|
Деревянные списки
|
|||
---|---|---|---|
#18+
А LEV зачем в таблице хранить? Его посчитать можно. В запросах с connect by существует псевдоколонка LEVEL. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2002, 08:55 |
|
Деревянные списки
|
|||
---|---|---|---|
#18+
Боюсь, что мой метод ему не подойдет. Этот вопрос, судя по всему, пришел из конференции по MS SQL. Вячеслав просто решил сравнить наши методы и их. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2002, 11:57 |
|
Деревянные списки
|
|||
---|---|---|---|
#18+
да ничего я не хотел сравнивать, просто система с которой работаю на двух платформах существует, так что проблему нужно решить и в MS и в оракле, но, в любом случае, всем спасибо SELECT * FROM my_table WHERE ID IN (SELECT DD.ID FROM my_table DD START WITH DD.ID = 1 CONNECT BY PRIOR DD.ID = DD.PARENT_ID) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2002, 07:09 |
|
|
start [/forum/topic.php?fid=52&msg=32028273&tid=1993363]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 30ms |
total: | 146ms |
0 / 0 |