|
|
|||||
Организация дерева.
Есть древовидная структура, произвольно разветвленная. нужно уметь извлекать ветку дерева как снизу, так и сверху: 1) от вершины все дочерние 2) от дочерней полный путь к корню
Я рассмотрел 2 варианта: 1. Для каждого "листа дерева" содержится его id, id родителя и level. Тогда нужно составлять сложный запрос, либо рекурсивно запрашивать (что, мне кажется, не самое быстрое регение), либо извлекать простым запросом и потом анализировать полученные данные. 2. id листьев строится через id родителей, например, в виду char через delimiter. То есть id родителя - 1, то id дочерних листьев 1d1, 2d1 и т.д., где d-разделитель (любой нецифровой символ, например). Запрос в этом случае всегда проще, но хранятся избыточные данные. Какой вариант предпочтительнее? какие есть еще способы формирования деревьев исходя из соображений простого и быстрого извлечения ветвей? --- Спасибо!
__________________
suum quique |
|
|||||
Регистрация: Nov 2002
Адрес: Спб
Сообщений: 40
|
С такого ранья, такие вопросы?
Лучше ООП никто ничего еще не придумал. Parent.Child....листик. Так что я за второй вариант.
__________________
Пока мыслю... |
|
|||||
"simple"
|
Есть ещё вопросы по этой теме:
1) Действительно, как в такой задаче дело обстоит с рекурсией? 2) Первый вариант RFMitrio, имхо, довольно удобен (сам использую что-то подобное), только, мне кажется, не нужно хранить level в БД - при рекурсии это очень легко вычислить... 3) Второй вариант RFMitrio, по-моему, не очень... Нужно со строками работать - гиморно... Просьба прокомментировать все способы знатоков ПХП Заранее спасибо!.. |
|
|||||
"simple"
|
Знатоки ПХП, откликнитесь!..
|
|
|||||
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
1. Идти сюда.
2. Если хочется теории -- идти на гугл и искать по фразе "nested sets". P.S. Связку по parentID на странице по приведенной ссылке не зря назвали 'brain dead method'.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
"simple"
|
2Crazy
Спасибо - почитаю! |
|
|||||
во втором может запросы и легче.. уследить где какой родитель и от чего очень сложно будет..
все равно придется что-то проверять (делать дополнительные запросы)... устанавливать какую-либо последовательность... оноо надо? проще по первому... P.S. со строками что-то делал када только начинал... еще ничего не знал... намучился... зато язык выучил
__________________
для спящего время бодрствования равносильно сну. Последний раз редактировалось Sami; 16.12.2002 в 01:28. |
|
|||||
"simple"
|
2Sami
что ты имеешь ввиду под "первым" и "вторым"? если методы, которые здесь обсуждались: родитель-предок (первый) и двойные флажки, то второй, естественно, намного быстрее и если дерево большое, то для построения такого дерева уйдёт нереально времени... |
|
|||||
"simple"
|
2Crazy
Не подкинешь ссылочку на русскую инфу по nested sets, плз? А то я что-то нашёл, но там не очень-то понятно... |
|
|||||
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
На русском ничего осмысленного не встрачал -- только пару очень кривых переводов.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
Часовой пояс GMT +4, время: 11:15. |
|
« Предыдущая тема | Следующая тема » |
|
|