Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Generowanie drzewa kategorii
Forum PHP.pl > Forum > Przedszkole
dawid17
Mam następujący problem:

Buduję drzewo kategorii sklepu i w nim znajdują się trzy tabele:

- tabela kategorie - zawiera: id_kategorii | nazwe_kategorii
- tabela podkategorie - zawiera: id_podkategorii | nazwe_podkategorii
- tabela łącząca obie powyższe - zawiera: id | id_kategorii | id_podkategorii | id_produktu(z tabeli produkty)

Po pierwsze to nie mam pojęcia czy taka struktura jest w ogóle poprawna.

Sytuacja wygląda w ten sposób że Każda kategoria może posiadać kilka podkategorii a każda z podkategorii może należeć do kilku kategorii.

Chciałbym zadać zapytanie do MYSQL które zwróci mi wynik:

kategoria_1 - podkategoria_1
- podkategoria_3
- podkategoria_4
kategoria_2 - podkategoria_1
- podkategoria_2
- podkategoria_4

Potrzebuję takiego wyniku aby przy pomocy pętli w php wygenerować drzewo kategorii własnie w ten sposób

Na tą chwilę cały czas otrzymuje coś takiego:

kategoria_1 - podkategoria_1
kategoria_1 - podkategoria_3
kategoria_1 - podkategoria_4
kategoria_2 - podkategoria_1
kategoria_2 - podkategoria_2
kategoria_2 - podkategoria_4


Zastanawiam się i głowie. Dochodzę do wniosków, że takie zapytanie nie jest w ogóle możliwe i trzeba przebudować strukturę bazy (ale w takim wypadku jak powinna ona wyglądać?) lub szukać rozwiązania w kodzie php?
Pyton_000
Zainteresuj się strukturami drzewiastymi.

Nested Set - średni poziom skomplikowania, szybkie selecty, dość złożone insert, delete, update
IP Tree - Tutaj implementacja jest łatwiejsza ale też wyszukiwanie nie jest takie trywialne ale i też nie bardzo skomplikowane.

dawid17
Przebudowałem bazę danych ale problem nadal pozostał myślę, ze trzeba go rozwiązać z poziomu php może wcześniej zbyt pogmatwałem.

pobieram z bazy pętlą for następującą tablicę asocjacyjną:


Dział 1 - kategoria 1
Dział 1 - kategoria 2
Dział 1 - kategoria 3
Dział 2 - kategoria 1
Dział 2 - kategoria 2
Dział 2 - kategoria 3
Dział 3 - kategoria 1
Dział 3 - kategoria 2
Dział 3 - kategoria 3

Chciałbym aby ten wynik uporządkować (wyświetlić na stronie) w taki sposób:

Dział 1 - kategoria 1
- kategoria 2
- kategoria 3
Dział 2 - kategoria 1
- kategoria 2
- kategoria 3
Dział 3 - kategoria 1
- kategoria 2
- kategoria 3

Chodzi o to żeby w jakiś sposób wpłynąć na iteracje aby tylko raz wzięła pod uwagę dane pole w tabeli (Dział 1, Dział 2, Dział 3)
szydlak
Możesz np w ten sposób. Przed pętlą ustawiasz sobie zmienną $biezacy_dzial z nazwą działu pierwszego elementu tablicy. W pętli np for porównujesz od pierwszego elementu tablicy czy dział jest równy ze zmienną $biezacy_dzial (za pomocą if) jeśli tak to wypisujesz podkategorie, a w innym przypadku (else) (czyli jak dojdzie do działu innego) ustawiasz zmienną $biezacy_dział i wypisujesz nową napotkany dział oraz kategorię.

Zakładam że dane są posortowane według działów.
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.