Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Generowanie drzewa kategorii
dawid17
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 20.10.2016

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


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





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

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


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.

Go to the top of the page
+Quote Post
dawid17
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 20.10.2016

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


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)

Ten post edytował dawid17 26.10.2016, 17:02:44
Go to the top of the page
+Quote Post
szydlak
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


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.

Ten post edytował szydlak 26.10.2016, 23:31:21
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:09