Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
14-1109041831
ЮЮ
2005-02-22 06:10
2005.03.13
Всех мужчин с наступающим !!!


14-1108879176
begin...end
2005-02-20 08:59
2005.03.13
С Днём рождения! 20 февраля


14-1108675062
AlterEgo of WondeRu
2005-02-18 00:17
2005.03.13
Женский алкоголизм


3-1108461764
Oleg_
2005-02-15 13:02
2005.03.13
русские буквы в paradox через BDE


14-1108984691
kaZaNoVa
2005-02-21 14:18
2005.03.13
Дайджесты форумов, и html-формат




   Наверх