![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дерево подчинённости [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?, если да в Делфях есть пример по заполнению ветвей дерева - ничего сложного