![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 5 Dołączył: 23.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Próbuje zrobić prosty system kategorii do galerii zdjęć. Na razie osiągnąłem tylko możliwość dodawania głównej kategorii i jednej podkategorii. Struktura bazy wyglada mniej wiecej tak: Kategorie |id||name||parent_id| 1 Kat1 0 2 Kat2 0 3 Kat3 2 4 Kat4 2 5 Kat5 1 Przy tym rozwiązaniu mogę dodać do kazdej kategorii wiele podkategorii, i do kazdej podkategorii wiele podpodkategorii itd. Mam jednak problem z banalna sprawą. W jaki sposób wyświetlić to gdziekolwiek? W tym momencie mam skrypt ktory działa mniej wiecej w ten sposób: 1. Wyswietl pierwsza kategorie i sprawdz czy `parent_id` <> 0; 2. Jesli tak to wykonaj nowe zapytanie sql, w ktorym wyszukasz wszystkie podkategorie z `parent_id` = id Te rozwiazanie jest wg mnie dobre ale tylko jesli ma wyswietlac się jedno "zaglebienie". Gdybym chciał wiecej tych "zaglebien" to musiałbym dla kazdego robić kolejne zapytanie, a chcialbym zeby ilość zaglebien była dynamiczna. Podsumowując: Tak mi się wyświetla:
Chciałbym wyświetlać tak:
Z góry dziękuję za pomoc. Ten post edytował jankes83 5.02.2010, 09:35:00 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
To się nazywa struktura drzewiasta, możesz poczytać o tym tu:
http://www.cojack.pl/postgresql-ltree/284 http://www.depesz.com/index.php/2008/04/11...n-trees-in-sql/ http://dev.mysql.com/tech-resources/articl...hical-data.html Polecam drugiego linka, gdyż pierwszego możesz nie ogarnąć. Albo trzeciego. -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
A ja polecam drzewa metodą IP:
http://blog.mwojcik.pl/2008/02/17/drzewa-k...-php-metoda-ip/ Jest tam nawet rekurencyjna funkcja do wyświetlania wyników, kto nie umie skorzystać sam sobie winien ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 5 Dołączył: 23.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Pilsner, Niestety utknałem na wyświetlaniu kategorii. Nie wiem w jaki sposób mam uzyskać taką tablicę:
[0] => ([1] =>Unix, [2] => Windows) [1] => ([3] =>Linux, [4] =>BSD) [2] => ([5] =>Windows XP, [6] =>Windows 98) [3] => ([7] =>Ubuntu, [8] => Slackware) |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
To tablica wielowymiarowa, pierwszy indeks to ID rodzica, natomiast drugi to właściwy ID danej kategorii.
Masz tam przecież kod: - oczywiście zapytanie to SELECT * from kategorie, następnie należy użyć funkcji, która jest także podana poniżej. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 5 Dołączył: 23.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że na tamtej stronie jest kod.
Nie moge jednak tego ogarnąć.
ten kod niestety nie chce działać.. po prostu nic się nie wyświetla. Nie wiem czy podstawiam do funkcji odpowiednie zmienne... |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
A po co Ci ten concat tam? To jest potrzebne po to (taka jest idea IP), by łatwo przenosić czy kasować poszczególne gałęzie drzewa. Tobie wystarczy zapytanie select * from kategorie. I nazwy pól w pętli while musisz mieć takie same jak w Twojej tabeli, czyli id i parent_id.
I nie wyświetlaj tego w pętli, tylko poza pętlą ![]() Najpierw w ogóle daj: - i zobacz, czy dane ładują się do tablicy. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 5 Dołączył: 23.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam ten kod:
wszystkie dane znajdują się w tablicy, ale funkcja display nie zwraca nic. Czy wrzucam tu dobre zmienne?: |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
1. Echo jest niepotrzebne, bo robi to już ta funkcja
2. Dajesz jej złe argumenty, pierwszy argument to ID gałęzi, które chcesz wyświetlić (jak całe drzewo to 0), natomiast drugi argument to tablica kategorii:
3. Sprawdź funkcją print_r, czy tablica zawierająca drzewo jest poprawna |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 5 Dołączył: 23.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko działa jak należy:)
Problemem były złe argumenty jakie podawałem funkcji display.. Dzieki za pomoc |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:40 |