Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php - drzewo kategori
Forum PHP.pl > Forum > PHP
dejwid
witam.
od pewnego czasu pisze skrypt sklepu.
zatrzymałem się przy drzewie kategori, nie wiem jak przez to przebrnąć.

mam taką tabele w mysql:
'id', 'category_id', 'parentCategory_id'
1, 11, 0
2, 12, 0
3, 13, 12
4, 14, 12
5, 15, 14
6, 16, 0
i potrzebuje z niej zrobić drzewo kategori.
ważne jest aby można było potem do tablicy drzewa dopisać reszte informacji ('nazwa','opis', z osobnej tabeli).
Zatem drzewo musi się składać z samych `id`.

Ma ktoś jakiś pomysł jak to zrobić?
#luq
Jest wiele sposobów struktur bazy pod drzewa. To które przedstawiłeś z parent id nie jest zbyt dobre w tym konkretnym przypadku...
Przeczytaj na początek to, tam też jest podany link do strony gdzie są przedstawione inne sposoby implementacji drzew
phpion
Cytat(#luq @ 16.09.2011, 00:26:44 ) *
To które przedstawiłeś z parent id nie jest zbyt dobre w tym konkretnym przypadku...

Dlaczego nie? Ja stosuję takie rozwiązanie i sprawdza się znakomicie. Całą strukturę drzewa pobieram jednym zapytaniem. Po pobraniu danych wystarczy je odpowiednio przetransformować w taki sposób, by otrzymać (dla tego przykładu) strukturę:
Kod
tree = [
    0 = [
        [id: 11, name: ...],
        [id: 12],
        [id: 16]
    ],
    12 = [
        [id: 13],
        [id: 14]
    ],
    14 = [
        [id: 15]
    ]
];

Kluczem tablicy jest ID rodzica, a elementami są jego potomkowie. Dzięki temu renderowanie drzewa od wybranej gałęzi (np. 0) jest banalnie proste - jeśli istnieje tree[$i] to lecimy po jego elementach. Dla każdego sprawdzamy czy istnieje tree[$id] i jeśli tak to powtarzamy operację. Pobranie identyfikatorów dzieci? Analogicznie jak poprzednio, ale zwracamy tylko identyfikatory. Ścieżka kategorii - też trzeba polecieć pętlą by znajdować rodziców poszczególnych elementów. Drzewko takie ładujemy raz i wszelkie operacje wykonujemy bezpośrednio na tablicy PHP, a nie bazie danych.
dejwid
@phpion
dzięki. nie wiedziałem że można to zrobić w tak prosty sposób wink.gif
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.