Zapoznałem się już z różnymi metodami implementacji drzewa kategorii, w tym:
- prosta: ID + parent_id
- nested tree (tree traversal)
- wszystkie powiązania - metoda Depesza - więcej...
- ścieżka typu IP (np. 001.007.015 bądź 1.7.15)
Zacząłem implementować metodę Depesza, jednak przenosiny kategorii wymagają skomplikowanych zapytań. Dlatego zastanawiam się, czy tego typu rozwiązania mają większy sens, gdyż potrzebna jest dodatkowa tabela i wzrasta zużycie przestrzeni dyskowej (choć niewiele).
Problem jest jeszcze przy wyciąganiu posortowanych kategorii. Autor używa zdefiniowanej funkcji w SQL-u, lecz myślę, że wystarczy wpisanie: "ORDER BY parent_id, depth, level" w zapytaniu.
Najważniejsza jest jednak szybkość. Jeśli już stosować podobną metodę, może lepiej zastosować nested tree bądź IP tree? Ta pierwsza prawdopodobnie jest mniej problemowa przy przenosinach, lecz pobrane dane wymagają dodatkowej obróbki w PHP (chyba, że dodamy do bazy dodatkowe pola, np. "depth", a wtedy też trzeba kombinować przy przenosinach).
Co do drugiej (IP) - z pobraniem nadkategorii nie ma problemu, bo ich ID znamy. :) Kategorie również łatwo posortujemy. Poziom w PHP odkryjemy po ilości kropek. Chcemy znaleźć jednak podkategorie. Wydajność może lekko spaść ze względu na użycie operatora LIKE (z % na końcu).
Wracając do prostego rozwiązania (ID + parentID):
- pobierając nadkategorie, raczej musimy użyć osobnych zapytań (chyba, że się mylę)
- przy wyświetlaniu wszystkich kategorii dane trzeba obrobić w PHP (w SQL-u sortujemy wg nazwy)
- można wykonywać cache niektórych zapytań
Potrzebuję rozwiązania łatwego i co najważniejsze - [b]szybkiego[/b]. :) Co możecie mi doradzić? Może macie już doświadczenia z tymi metodami?