Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Najbardziej optymalne pobranie drzewa kategorii
Forum PHP.pl > Forum > PHP
camikazee
Witam!

Buduję system w którym jest ok 600 kategorii. Maksymalne zagnieżdżenie jest potrójne. Załóżmy kategoria A ma dzieciaka B, a ten dzieciaka C. Wywołujemy kategorię C i chcę wyświetlić całą gałąź w pasku nawigatora czyli np A:B:C. Zwykle wrzucałem w postaci tablicy do pliku (na zasadzie cache) drzewo kategorii i funkcjami rekurencyjnymi wyciągałem to co mnie interesowało. Jednak zastanawiam się jakie rozwiązanie jest tu najbardziej optymalne.
Jak Wy rozwiązujecie takie przypadki?
Crozin
W tym konkretnym przypadku (tj. wyświetlania wszystkich gałęzi od korzenia do liścia) model nested set jest jednym z wygodniejszych.
camikazee
Tak, tylko ja już korzystam z metody wykorzystującej parent id i depth. Większe serwisy jak allegro i pokrewne, często wyciągają całe drzewa kategorii, gałęzi itd. Dlatego zastanawiam, się czy bez super wydajnych komputerów można to zrobić w sposób optymalny, pomijając model "Nested set". Czy po prostu najlepiej cachować.
lukaskolista
Cytat
Tak, tylko ja już korzystam z metody wykorzystującej parent id i depth
A nested sets przy wyswietlaniu to niby z czego korzysta, jak nie z depth? Nested sets jest jak juz poprzednik wspomnial bardzo wygodnym rozwiazaniem, na poczatku sa z tym problemy, ale jak sie juz dojdzie do wprawy to jest git.
wiiir
nie wiem jak jest w mysql ale w oraclu mozna zrobic to jednym zapytaniem majac tylko id orazu masz tez level - jest to pseudokolumna

  1. SELECT level , id_rodzica FROM twoja_tabela t
  2. connect BY prior t.id = t.id_rodzica start WITH t.id = id_menu


moze znajdziesz cos na wzor tego
camikazee
Jestem tak zakręcony, że zapomniałem o kolumnie, którą jeszcze dodałem root, która zawiera id głównej kategorii. I według niej wyjmę i szybko posortuje.
JoShiMa
Cytat(lukaskolista @ 6.04.2011, 08:30:20 ) *
A nested sets przy wyswietlaniu to niby z czego korzysta, jak nie z depth?

Wcale nie ma konieczności trzymania takiej kolumny w bazie w przypadku drzewa typu nested set depth liczy się w zapytaniu i to żadna filozofia. Polecam coś nieco na ten temat.

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.