Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php - drzewo kategori
dejwid
post 15.09.2011, 23:09:10
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
#luq
post 15.09.2011, 23:26:44
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
phpion
post 16.09.2011, 07:10:50
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
dejwid
post 16.09.2011, 14:58:45
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


@phpion
dzięki. nie wiedziałem że można to zrobić w tak prosty sposób wink.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 07:44