id | parent_id | name
Generuję sobie całe drzewo taką funkcją (jakiś gotowiec), w $array mam raz pobraną tablicę wszystkich kategorii:
function generateTree($array, $parent = 0, $level = 0) { $has_children = false; foreach ($array as $key => $value) { if ($value['parent'] == $parent) { if ($has_children === false) { $has_children = true; $level++; } echo '<li><a href="' . URL . 'forum/category/' . $value['category_id'] . '">' . $value['category_name'] . '</a>'; generateTree($array, $value['category_id'], $level); } } if ($has_children === true) }
Mogłoby się wydawać, że wykonuję jedno zapytanie MySQL i reszta powinna się już po stronie PHP wykonać szybko, jednak przy 2.000 kategorii i wielu zagnieżdżeniach, drzewo potrafi się generować kilka sekund.
Jeśli zamienię strukturę tabeli na nested set
id | parent_id | nleft | nright | name
i później będę wyciągał również całe drzewo, to wykona się szybciej? Czy nie ma sensu bawić się w zmianę struktury bazy, bo i tak będę musiał zastosować rekurencję i wyjdzie praktycznie na to samo?