![]() |
![]() ![]() |
![]() |
![]()
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ć? |
|
|
![]()
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
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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. |
|
|
![]()
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 ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 07:44 |