mskiba
11.10.2014, 20:54:25
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
11.10.2014, 21:01:42
To jeszcze tylko napisz czego dokładnie potrzebujesz bo chyba nie liczysz na gotowy kod
mskiba
11.10.2014, 21:22:06
Oczekuje pomocy w znalezieniu rozwiązania jak wyświetlić drzewo kategorii

$sql=$connect->query("SELECT * FROM category WHERE parent_id='0'");
while($row=$sql->fetch_object())
{
echo "-- ".$row->category_name."<br />"; $sql2=$connect->query("SELECT * FROM category WHERE parent_id='".$row->category_id."'");
while($row2=$sql2->fetch_object())
{
echo "---- ".$row2->category_name."<br />"; }
}
itp. Tym rozwiazaniem moge sobie to wyswietlić, ale jest ono ograniczone do ilosci wpisanych zapytan, pozatym jestem pewien, ze jest jakies inne rozwiazanie

I wlasnie o taka pomoc chodzi. Jakie

?
mortus
12.10.2014, 08:45:07
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
12.10.2014, 08:48:48
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
12.10.2014, 09:36:43
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
12.10.2014, 10:16:41
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
Micchaleq
21.10.2014, 14:25:10
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
22.10.2014, 07:45:55
@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.