Главная страница
    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.45 MB
Время: 0.042 c
1-1109413341
Xerx
2005-02-26 13:22
2005.03.13
Динамическое выделение кусков текста в Rich е


3-1107951768
vvv_spb
2005-02-09 15:22
2005.03.13
SELECT FROM JOIN


4-1107184514
ANB
2005-01-31 18:15
2005.03.13
Управление другими приложениями


1-1109683663
emfw
2005-03-01 16:27
2005.03.13
Мноострочный список


6-1105227027
Raider
2005-01-09 02:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский