Вложенность дерева

  • Автор темы Автор темы Leshas0
  • Дата начала Дата начала

Leshas0

Новичок
Вложенность дерева

Есть таблица tree со следующей стандартной структурой:
id | parent_id | name

Рекурсия - это хорошо, дерево строиться правильно, но мне нужно посчитать глубину дерева.

Как узнать вложенность дерева?
 
Leshas0
Вложенность дерева во что? :)

Может глубину ветки определенной? по кол-ву вызовов рекурсивной функции для её построения.
 
Хорошо, перфразирую)
Мне нужно узнать глубину ветки, у которой parent_id = 0
 
нет, ничего нового не ввели.
ответ не могу получить, никто не знает как узнать глубину любой ветки?
 
Leshas0
при такой структуре таблица не приспособлена для того, чтобы простым и односложным образом работать с ветвями.
 
Gorynych
а что нужно сделать, чтобы приспособить таблицу? или вообще, как это можно реализовать? какими способами?
 
можно добавить поле (сюрприз!) "уровень вложенности". и пересчитывать его при модификации дерева. Можно хранить в поле всех родителей через запятую... По форуму полазать-можно еще найти методы. часто обсуждается тема.
 
Была идея про поле "Сюрприз", но мне показалось, что это не слишком хорошая идея.
 
2 Leshas0: собственно _vampiro_ уже написал, что можно сделать.

ответ на вопрос что именно из возможных решений стоит применять зависит от того, какие операции вы хотите (предполагаете) совершать над таблицей и как часто?

например, глубину дерева можно хранить в отдельном поле и тогда ответить на вопрос: "какова глубина?" - будет очень легко.

но при этом, добавляя каждый новый узел, Вам надо обновить информацию о глубине во всех вышестоящих узлах. И еще - отдельное поле для глубины (или уровня) никак не поможет в случае, если нужно вытаскивать какую-то подветку одним запросом.
 
Gorynych, дерево модифицироваться будет очень НЕчасто. В принципе, идея хранить информацию о глубине ветки в отдельном поле - хорошая. Пожалуй, буду использовать именно этот алгоритм. Спасибо.
 
Leshas0
Структура называется "brain dead method", а не "стандартная".
Открой для себя Nested Sets.
 
Сверху