Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Drzewo kategorii
mskiba
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 28.04.2013

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


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.
Go to the top of the page
+Quote Post
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


To jeszcze tylko napisz czego dokładnie potrzebujesz bo chyba nie liczysz na gotowy kod snitch.gif
Go to the top of the page
+Quote Post
mskiba
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 28.04.2013

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


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 ?
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
Go to the top of the page
+Quote Post
acidm
post
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


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:)

Ten post edytował acidm 12.10.2014, 08:50:08
Go to the top of the page
+Quote Post
destroyerr
post
Post #6





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


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.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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
Go to the top of the page
+Quote Post
Micchaleq
post
Post #8





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

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


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

Ten post edytował Micchaleq 21.10.2014, 14:27:20


--------------------
Go to the top of the page
+Quote Post
mortus
post
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


@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ć).
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 Aktualny czas: 20.08.2025 - 04:05