Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
14-1109053646
Vlad Oshin
2005-02-22 09:27
2005.03.13
http://rapira.ru/articles/article0423.htm


3-1108117514
sashakamap
2005-02-11 13:25
2005.03.13
ADO MAX(....)


1-1109367619
Zoth
2005-02-26 00:40
2005.03.13
Делфи и мобильник


1-1109241872
zdn
2005-02-24 13:44
2005.03.13
Дополнительные параметры


1-1109751766
Новая
2005-03-02 11:22
2005.03.13
Как динамически создавать однотипные формы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский