Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Дерево подчинённости   Найти похожие ветки 

 
Pashkerton   (2005-02-25 10:50) [0]

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

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


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

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


 
DiamondShark ©   (2005-02-25 10:58) [2]

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


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

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


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

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


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

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


 
TUser ©   (2005-02-25 11:18) [6]

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


 
Digitman ©   (2005-02-25 11:21) [7]


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


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


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


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


 
ЮЮ ©   (2005-02-25 11:30) [8]

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)



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

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
14-1109067231
1008
2005-02-22 13:13
2005.03.13
Как с этого сайта статьи гамузом стянуть?


9-1102850191
DeadMeat
2004-12-12 14:16
2005.03.13
Цена моделей


6-1104693820
JorSand
2005-01-02 22:23
2005.03.13
Как используя Wininet команды (wininet.dll) очистить кэш?


14-1108752675
вредитель
2005-02-18 21:51
2005.03.13
О музыке сложной для восприятия или... ля-ля-ля, а я сошла с ума


6-1105033797
Progh
2005-01-06 20:49
2005.03.13
Ошибка при отсылке письма через idSMTP