![]() |
![]() ![]() |
![]() |
![]()
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? |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 23:09 |