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

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

Дерево подчинённости [D6, Win2k]


Pashkerton ©   (2005-02-25 10:50:00) 

Есть дерево (таблица примерно такая)
id  parent  name
1    -1      a
2     1      b
3     2      c
4     2      d
5     3      e

Пусть "name" это отделы какой либо организации. За каждам отделом
числится n сотрудников. Как сделать просмотр организовать просмотр всех сотрудников дочерних веток дерева?


ЮЮ   (2005-02-25 11:30:00) [1]

SELECT Fio, d0.name
FROM
 Persons p
 LEFT JOIN Departments d0 ON p.Id = d0.id
 LEFT JOIN Departments d1 ON d0.parent = d1.id
 ...
 LEFT JOIN Departments d<k> ON d<k-1>.paremt = d<k>.id
WHERE
 (d0.Id = :Department) OR
 (d1.Id = :Department) OR
 ...
 (d<k>.Id = :Department)


Digitman   (2005-02-25 11:21:00) [2]


> Можно в принципе в парент хранить всех предков по чепочке
> до вершины


дурней решения не придумаешь


> Вот это выход!


рекурсивный обход доч.узлов чем не устраивает ?
а если не устраивает, то почему бы не вести (синхронно с основной) вспом.таблицу, в которой фиксируются непрямые родственные связи между узлами, их отн.уровни и корневые ссылки ?


TUser   (2005-02-25 11:18:00) [3]

Я примерно такую штуку делал, но хранил 2 таблицы
No - parent - first child - next child


Pashkerton   (2005-02-25 11:12:00) [4]

Можно в принципе в парент хранить всех предков по чепочке до вершины. При выборке брать id того отдела в котором я есть и выбирать все id где parent like id*. Вот это выход!


andycat   (2005-02-25 11:06:00) [5]

по моему обычная задача по логике - несколько вложенных циклов с сохранением промежуточных результатов в TTree


Pashkerton   (2005-02-25 11:03:00) [6]

2 таблицы. Перву я уже описал. Вторая пусть будет такой
key id  fio
где id номер отдела, остальные поля говорят сами за себя.
у отдела "b" есть подотделы c d e. Так как же посмотреть всех сотрудников всех веток которые ниже звена b?


DiamondShark   (2005-02-25 10:58:00) [7]

Никак. В исходных данных никаких n сотрудников нет.


andycat   (2005-02-25 10:57:00) [8]

в смысле TTree?, если да в Делфях есть пример по заполнению ветвей дерева - ничего сложного


Наверх

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