Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Pobieranie produktów z kategorii i podkategorii
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Zastanawiam się nad tym jak pobrać produkty (lub inne elementy bazy danych) z podanej kategorii i kategorii które mają to id w polu id_kat_nadrzednej. Obecnie mam tak:
  1. SELECT * FROM `produkty` WHERE `kategoria` = '.$id

I pobierze produkty z kategorii (powiedzmy) żarówki. Ale w kategorii żarówki są też podkategorie tj. energooszczędne i świetlówki a w nich inne produkty. Jak je pobrać?

Proszę o pomoc!
Daiquiri
Dla każdego z elementów nadrzędnych sprawdzaj czy istnieje element podrzędny? Za pomocą np. for przejedź po wszystkich pozycjach i sprawdź czy inny element ma ID elementu nadrzędnego w polu id_kat_nadrzednej.
Skie
Podaj jak wygląda struktura Twojej bazy danych z tymi kategoriami i podkategoriami, bo jakkolwiek myślę to wciąż nie potrafię znaleźć sensu między tym co napisałeś a realnym wykorzystaniem czegoś takiego.
Daiquiri
@Skie
Z opisu wynika, że thomson89 kombinuje z układem tabel znanym z np. drupala (tabele z menu).
thomson89
Produkty to konstrukcja prosta. Wszystkie potrzebne wartości, ceny, nazwy, ilości itp. itd.
Kategorie:
Kod
id | nazwa | poziom | id_kategori_wyzszej | kol (kolejność)
bemol
Podaj wszystkie tabele bo z tego co ja rozumiem to chodzi tylko o takie coś:
  1. SELECT * FROM `produkty` WHERE `kategoria` = $id OR `id_kategori_wyzszej` = $id
Daiquiri
Możesz posegregować dane w taki sposób, że elementy nadrzędne mają kolumny takie jak w bazie, z tym, że jeżeli dla danej kategorii istnieje subkategoria zamiast numeru w id_kategori_wyzszej - zapisuj w tym polu tablicę z danymi o subkategorii. Dla elementów, które nie mają subkategorii możesz zostawiać puste pole lub nadawać mu wartość zero.

Wtedy wystarczy napisać funkcję, która przejedzie Ci po wszystkich elementach o zadanym ID kategorii wyższej, powiedzmy function menu($ID) i return $tablica. Za pomocą np. for możesz przypisywać wartości poszczególnych elementów do $tablica a gdy będziesz chciał zapisać pole id_kategori_wyzszej - wywołaj menu($ID) - gdzie Twoje ID będzie stanowić numerek z id_kategori_wyzszej smile.gif.
thomson89
Tak jak napisałeś, to tak już chciałem zrobić ale pole id_kategori_wyzszej jest w innej tabelce.

Całość zapytania sprowadza się do zakodowania tego:
  1. SELECT * FROM `produkty` WHERE `kategoria` = $id OR [pole id_kategori_wyzszej w tabelce kategoria] = $id

I tyle filozofii. Tylko jak to zakodować.

---

Chyba sam sobie pomogłem tongue.gif Za pomoc dziękuję nosporowi który stworzył w sieci portal nospor.pl i umieścił tam artykuł o grupowaniu wyników.

  1. SELECT * FROM produkty p LEFT JOIN kategorie k WHERE p.kategoria = $id OR k.id_kategori_wyzszej = $id
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.