Главная страница
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.045 c
1-1109345934
denis24
2005-02-25 18:38
2005.03.13
Tbitbtn.glyph


1-1109616049
_RusLAN
2005-02-28 21:40
2005.03.13
StringGrid + ListBox (в каждой ячейке)


1-1109576141
dm37
2005-02-28 10:35
2005.03.13
RichEdit


1-1109607947
Simply Alex
2005-02-28 19:25
2005.03.13
Прокрутка в DBGrid


14-1108629326
КаПиБаРа
2005-02-17 11:35
2005.03.13
Психологическая разгрузка