Nested Set - > Classic

HraKK

Мудак
Команда форума
Nested Set - > Classic

Что-то с ходу не могу придумать алгоритм перевода из Nested Set в классический метод хранения деревьев.
Если кто-то знает, или решал поделитесь :)

Спасибо.
 

Vallar_ultra

Любитель выпить :)
PHP:
$query="SELECT * FROM ".$table." ORDER BY cleft ASC"; 
$result=$dbh->query($query); 
$idPerLevel = array();
while($row = $dbh->fetch_array($result)) 
{ 
   // echo str_repeat("&nbsp;",6*$row['clevel']).$row['title']."<br>"; 
   if(empty($idPerLevel[$row['clevel']])) $idPerLevel[$row['clevel']] = array();
   $idPerLevel[$row['clevel']][] = $row['cid'];
   if($row['clevel']>0){
   	$sql = "INSERT INTO `classic_tree`(`id`,`pid`) VALUES('".$row['cid']."','".array_pop(array_values($idPerLevel[$row['clevel']-1]))."')";
   }
   else{
   	$sql = "INSERT INTO `classic_tree`(`id`,`pid`) VALUES('".$row['cid']."',0)";
   }
   $dbh->query($sql); 
}
 

Vallar_ultra

Любитель выпить :)
HraKK
А если не секрет, то зачем такие преобразования? Nested Set довольно удобная стр-ра хранения деревьев....
 

MiksIr

miksir@home:~$
Угу, красивая для построения дерева, но, имхо, жутко некрасивая в плане работы с ветками.
 

Vallar_ultra

Любитель выпить :)
2MiksIr

Ну почему же..... Вполне нормально с ветками можно работать. Вынес все операции над деревом в отдельный класс и можно наслаждаться жизнью. По-моему Nested Set особенно удобен когда большие уровни вложенности и много записей по дереву вообще, т.к. позволяет избежать кучи рекурсивных вызовов...
 

MiksIr

miksir@home:~$
Ну не знаю... я тут как-раз изучал такой класс - сложность реализации удивила. Самому сейчас приходит мысль в базе хранить дерево в виде id-pid и удаления/добавления/перемещения делать так, а Nested Set создавать при чтении дерева в мемкеш уже для запросов на выборку =)
 

Vallar_ultra

Любитель выпить :)
2MiksIr

Я конечно разностей по производительности классического дерева и nested set не знаю, но по-моему оба метода равнозначны. У одного простое обновление, но тяжелые выборки, у другого ровно наоборот..... весь вопрос для чего применяется каждый метод.
 

HraKK

Мудак
Команда форума
Vallar_ultra
Nested Set - быстрая выборка - медленная вставка
Classic - медленная выборка - быстрая вставка

А понадобилось перенести информацию с 1 цмс на мою. А у меня классика + кешь меню, что как по мне дает резуьтат лучше чем Nested Set, так как выборка занимает одинаковый результат а вот вставка быстрее.
 
Сверху