Вопросег по деревьям

Статус
В этой теме нельзя размещать новые ответы.

Духовность™

Продвинутый новичок
Вопросег по деревьям

Я написал класс, который возвращает массив дерева.
На 9 записей в таблице приходится 18 запросов. Это очень плохо, да?
 

kode

never knows best
очень плохо, потому-что дерево нужно строить в самом php, а к БД делать всего один запрос. Каким способом строишь дерево?
 

Духовность™

Продвинутый новичок
а к БД делать всего один запрос
как это вообще возможно?...


Каким способом строишь дерево ?
1. Выбираю ID записи, ID родителя корневых элементов, где ID родителя = 0. Получаю массив корневых элементов.

2. В цикле иду по этому массиву. В рекурсивную функцию передаю ID записи, ID родителя. Функция сначала вытаскивает запись, у которой ID записи, ID родителя равны соответствующим полям в таблице (получаем данне корневого элемента), а потом эта функция вытаскивает всех потомков, у которых ID родителя равен ID текущей записи. Если данные имеются, то применяем к ним эту рекурсивную функцию.
 

kode

never knows best
кстает, тот алгоритм что на phpwiki бред сумшедшего,

PHP:
//это тестовые данные, если получаем из бд то сортируем по parent

$test = array(
array('id'=>1,'parent'=>0,'title'=>'level_0_1'),
array('id'=>2,'parent'=>0,'title'=>'level_0_2'),
array('id'=>3,'parent'=>1,'title'=>'level_1_1'),
array('id'=>4,'parent'=>1,'title'=>'level_1_2'),
array('id'=>5,'parent'=>2,'title'=>'level_2_1'),
array('id'=>6,'parent'=>2,'title'=>'level_2_2'),
);

//корень дерева
$root = array();

//таблица ссылок
$links = array(0=>&$root);

foreach ($test as &$element){
	$links[$element['id']] = &$element;	
	$links[$element['parent']]['childs'][$element['id']] = &$element;
}

var_dump($root);
имхо более красивое решение
 
Я начал замечать, что гораздо проще написать вопрос, который уже сто раз обсуждали на форуме здесь, в оффтопе , и получить более менее нормальный ответ, чем создать новую тему там и с раздражением ждать, как щас посыпятся советы поискать в гугле или по форуму ))))

triumvirat
c 2007 года 476 сообщений. Вы поражаете меня... Лично для меня, количество сообщений - показатель ммм... как бы сказать то... компетентности.

>На 9 записей в таблице приходится 18 запросов. Это очень плохо, да?
Нет, это ещё не очень плохо. Очень плохо будет, когда иерархическая структура данных, станет глубже и ветвистей.
 

kode

never knows best
Автор оригинала: Вася Патриков
Лично для меня, количество сообщений - показатель ммм... как бы сказать то... компетентности.
Вот почему мне нравятся анонимные имеджборды. Нет авторитетов....авторитеты это плохо.
 

Духовность™

Продвинутый новичок
kode
ты про какой именно алгоритм? не про этот случайно? http://phpclub.ru/faq/Tree/AlLoadAll?v=i3b

c 2007 года 476 сообщений. Вы поражаете меня... Лично для меня, количество сообщений - показатель ммм... как бы сказать то... компетентности.
открою Вам секрет, количество сообщений к компетентности никакого отношения не имеет.

Не поверите,с деревьями первый раз столкнулся.
 

kode

never knows best
Автор оригинала: triumvirat
открою Вам секрет, количество сообщений к компетентности никакого отношения не имеет.

Не поверите,с деревьями первый раз столкнулся.
Понимаешь, тут дело не в опыте, а в..мммм....способе мышления чтоли. Просто я например, перед тем чтобы что-то писать думаю как это лучше написать. Есть конечно моменты где решение не всегда очевидно, но я после того как реализовав придуманный алгоритм либо оптимизирую его, либо сношу всё и придумываю более лучший алгоритм, это я называю это творческий поиск.
 
kode
>Просто я например, перед тем чтобы что-то писать думаю
Вау !! А я - нет ))))))
>я называю это творческий поиск
я подозреваю, что это всем нам присуще, в той или иной степени. В зависимости как спроектировал вначале.
Спроектировал плохо - творческий поиск дольше )) баланс !!
 

kode

never knows best
Автор оригинала: Вася Патриков
kode
>Просто я например, перед тем чтобы что-то писать думаю
Вау !! А я - нет ))))))
Поздравляю :))) Но здесь действительно есть такие которые поступают иначе


Автор оригинала: Вася Патриков
>я называю это творческий поиск
я подозреваю, что это всем нам присуще, в той или иной степени. В зависимости как спроектировал вначале.
Спроектировал плохо - творческий поиск дольше )) баланс !!
Не спорю, проектирование тоже творческий поиск
 

Духовность™

Продвинутый новичок
т.е., как я понимаю, основной принцип построения деревьев - это разбор их непосредственно в PHP? И вариантов-алгоритмов может быть сколь угодно много?
 

StUV

Rotaredom
т.е., как я понимаю, основной принцип построения деревьев - это разбор их непосредственно в PHP?
как я понимаю - надо исследовать существующие решения, а потом уже хорошо подумать
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху