Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Drzewo kategorii, szybkość
Forum PHP.pl > Forum > Przedszkole
Damonsson
W bazie mam strukturę, dla kategorii:

id | parent_id | name

Generuję sobie całe drzewo taką funkcją (jakiś gotowiec), w $array mam raz pobraną tablicę wszystkich kategorii:

  1. function generateTree($array, $parent = 0, $level = 0) {
  2. $has_children = false;
  3. foreach ($array as $key => $value) {
  4. if ($value['parent'] == $parent) {
  5. if ($has_children === false) {
  6. $has_children = true;
  7.  
  8. echo '<ul>';
  9. $level++;
  10. }
  11. echo '<li><a href="' . URL . 'forum/category/' . $value['category_id'] . '">' . $value['category_name'] . '</a>';
  12. generateTree($array, $value['category_id'], $level);
  13. echo '</li>';
  14. }
  15. }
  16. if ($has_children === true)
  17. echo '</ul>';
  18. }


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?
konrados
Wiem, że to nie jest tak do końca odpowiedź na Twoje pytanie, ale drzewka kategorii zwyczajnie cachuję, zawsze. I nie ma co się martwić o te sekundy bo one będą problemem tylko raz po modyfikacji drzewka.
alegorn
w nested set nie musisz sie bawic w rekurencje, pobierasz cale drzewo/gałąź w jednym zapytaniu

jeśli po stronie php potrafisz wykorzystać że drzewo masz juz posortowane - jest szybciej. sprawdzałem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.