Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Pobieranie produktów z kategorii i podkategorii
thomson89
post 18.09.2010, 15:39:04
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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!


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
Daiquiri
post 18.09.2010, 15:41:29
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.

Ten post edytował Daiquiri 18.09.2010, 15:43:02
Go to the top of the page
+Quote Post
Skie
post 18.09.2010, 16:21:19
Post #3





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


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.


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
Daiquiri
post 18.09.2010, 16:24:37
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




@Skie
Z opisu wynika, że thomson89 kombinuje z układem tabel znanym z np. drupala (tabele z menu).

Ten post edytował Daiquiri 18.09.2010, 16:25:08
Go to the top of the page
+Quote Post
thomson89
post 18.09.2010, 17:40:03
Post #5





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Produkty to konstrukcja prosta. Wszystkie potrzebne wartości, ceny, nazwy, ilości itp. itd.
Kategorie:
Kod
id | nazwa | poziom | id_kategori_wyzszej | kol (kolejność)


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
bemol
post 18.09.2010, 17:56:57
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 29
Dołączył: 5.04.2007
Skąd: Rymanów Zdrój/Rzeszów

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


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


--------------------
Tym ludziom zaufałem i dobrze na tym wyszedłem:
kresh
Darti
piotrekkr
Bez nich wiele bym nie zrobił. Dzięki im za to!
Go to the top of the page
+Quote Post
Daiquiri
post 18.09.2010, 18:01:46
Post #7





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
thomson89
post 18.09.2010, 18:34:51
Post #8





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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


Ten post edytował thomson89 18.09.2010, 18:35:11


--------------------
Sklep 70%
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 06:34