Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Drzewo kategorii
Forum PHP.pl > Forum > PHP
mskiba
Witam.

Mam w bazie kategorie:

category_id | category_name | parent_id
1 | Filtry | 0
2 | Oleju | 1
3 | Powietrza | 1
4 | Kabinowe | 1
5 | Paliwa | 1
6 | Z węglem aktywnym | 4
7 | Bez węgla | 4

itp.

Chodzi mi o to, że by wyświetlić drzewo kategorii w takiej postaci:

-- Filtry
---- Oleju
---- Powietrza
---- Kabinowe
------ Z węglem aktywnym
------ Bez węgla
---- Paliwa


Z góry dziękuje za pomoc.
destroyerr
To jeszcze tylko napisz czego dokładnie potrzebujesz bo chyba nie liczysz na gotowy kod snitch.gif
mskiba
Oczekuje pomocy w znalezieniu rozwiązania jak wyświetlić drzewo kategorii wink.gif

  1. $sql=$connect->query("SELECT * FROM category WHERE parent_id='0'");
  2. while($row=$sql->fetch_object())
  3. {
  4. echo "-- ".$row->category_name."<br />";
  5. $sql2=$connect->query("SELECT * FROM category WHERE parent_id='".$row->category_id."'");
  6. while($row2=$sql2->fetch_object())
  7. {
  8. echo "---- ".$row2->category_name."<br />";
  9. }
  10. }


itp. Tym rozwiazaniem moge sobie to wyswietlić, ale jest ono ograniczone do ilosci wpisanych zapytan, pozatym jestem pewien, ze jest jakies inne rozwiazanie wink.gif I wlasnie o taka pomoc chodzi. Jakie wink.gif ?
mortus
Poszukaj w sieci informacji o strukturach drzewiastych w bazach danych, mogą to być np. drzewka ip, ale nie tylko. Oczywiście nie obejdzie się bez zmiany struktury bazy danych, choć jeśli to drzewo kategorii nie będzie jakoś szczególnie rozbudowane to wystarczy prosta rekurencja.
acidm
Są inne rodzaje drzewek ,lepsze,w sumie to każde jest lepsze od twojego przykładu, zainteresuj się "nested sets".

//edit
@mortus byłeś szybszy:)
destroyerr
Moim zdaniem polecanie innych modeli drzew jest bezpodstawne. Jeżeli tych kategorii będziesz miał niewiele (to znaczy jeżeli wydajność tego rozwiązania będzie niezadowalająca) to warto pozostać przy parent_id. Z bazy danych pobierz od razu całe drzewo (czyli w Twoim przypadku dane z całej tabeli). Następnie przetwórz sobie wszystko w php i wyświetl.
Pyton_000
Po nazwach kat. widać że są to auto części, a tych kategorii jest sporo..

Dalej idąc myślą kategorie nie będą dodawane, usuwane, przenoszone za często bo nie widzę takiej potrzeby
Dalej wnioskując ilość modyfikacji będzie znikoma w porównaniu do odczytów i działania na drzewach.

Reasumując idealne jest nestet set.
Owszem trudna implementacja ale zalety jakie wink.gif
Micchaleq
Cześć,

Napiszę tak bardzo ogólnie.
Przydało by się w twoiej bazie podczas dodawania/edycji kategori okreslana w którym rzędzie dana kategoria się zanjduje, ewentualnie funkcja określająca ilu ma rodziców.

W takim przypadku w HTML-u generujesz sobie odstęp np padding-left x rząd
przykład :
Filtry | rząd 1
Kabinowe | rząd 2
Bez węgla | rząd 3

Na takiej podstawie dajesz sobie odpowiednią ilość znaków i problem rozwiązany.

PS: Panowie, autor pytał jak to rozwiązać, z tego co widać nie szuka gotowych rozwiązań.

Pozdrawiam
mortus
@Micchaleq Przecież nikt tutaj nie podał gotowego rozwiązania, a jedynie kilka sugestii. Drzewa IP czy nested sets to tylko metody na implementację drzewa kategorii w bazie danych. Trzeba to jeszcze wdrożyć, co wcale sprawą prostą nie jest. De facto sam piszesz o potrzebie zmiany struktury bazy danych i dodaniu dodatkowych kolumn, niemniej nigdzie nie piszesz, jak to wykorzystać. Ponadto sprowadzasz problem do kwestii wyświetlania drzewa kategorii, a tymczasem po kodzie autora można wywnioskować, że chodzi raczej o odczytanie drzewa kategorii z bazy danych (przyjrzyj się zagnieżdżonym pętlom while i zastanów się ile kategorii/podkategorii można w ten sposób pobrać).
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.