|
|
|
Решение построения дерева
|
|||
|---|---|---|---|
|
#18+
Народ, подскажите как построить дерево из таблицы БД, содержащей структуру отделов предприятия. Неправильно делать структуру это дерева статической. А это значит что заранее знать сколько подразделений и к кому они будут привязаны(ихняя иерархия) невозможно. По какому пути топать, может у кого то были подобные задачи? Таблица одна, содежит такой формат (1-поле)идентификатор узла, (2-поле)к кому привязан узел(ссылка на первое поле) (3-поле)название узла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 17:41:08 |
|
||
|
Решение построения дерева
|
|||
|---|---|---|---|
|
#18+
Например 1. Перегоняешь данные из таблицы в плоскую структуру 2. Создаёшь метод поиска дочерных элементов по плоской структуре по заданому родителю. 3. Создаёшь из плоской структуры древовидную, используя метод (2), вытянув вначале все элементы в которых родитель = 0 (или -1 или NULL, всё зависит как они помечаются), тоесть элементы верхнего уровня. Дальше по рекурсии пошло ...поехало, тянем дочерные элементы у дочерных...до тех пор пока не затянем всё дерево. Эта древовидная структура и будет моделью для дерева. Дочерные элементы можно подгружать по требованию (динамически), тоесть когда запрашиваеться метод что типа getChildren(), тогда вообще можно без рекурсии Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 19:31:12 |
|
||
|
Решение построения дерева
|
|||
|---|---|---|---|
|
#18+
startbitНарод, подскажите как построить дерево из таблицы БД, содержащей структуру отделов предприятия. Неправильно делать структуру это дерева статической. А это значит что заранее знать сколько подразделений и к кому они будут привязаны(ихняя иерархия) невозможно. По какому пути топать, может у кого то были подобные задачи? Таблица одна, содежит такой формат (1-поле)идентификатор узла, (2-поле)к кому привязан узел(ссылка на первое поле) (3-поле)название узла. Старая-старая задача. Простейшее решение "в лоб" - найти верхние узлы (с field1 is null), потом найти и присоединить к ним подчиненных, к тем - их подчиненных и т.д обычной рекурсией. А потом начинаются всякие оптимизации - использование СУБД-специфичных диалектов для быстрого и упорядоченного вытягивания иерархии, построение дерева "кусочками" (когда узлы строятся в процессе единственного прохода таблицы и постепенно привязываются друг к другу), формирование иерархии в другом формате (с обходом схемы слева направо). Всякого на эту тему понаписано море. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 19:32:25 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=598&tid=2144121]: |
0ms |
get settings: |
11ms |
get forum list: |
53ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
34ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 341ms |
| total: | 526ms |

| 0 / 0 |
