Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP - wyświetlanie produktów z samej kategorii lub podkategorii - problem
arlid
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 16.06.2007

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


Witam. Za pomocą GET pobieram dwa parametry:

  1. pokaz_tablice.php?katID=1&podkatID=2


Wszystko tutaj działa ok - wyświetla mi produkty z kategorii 1 i przypisanej do niej podkategorii. . Chciałbym móc także podać taki link
pokaz_tablice.php?katID=1
który wyświetli produkty z całej kategorii i wszystkich należących do niej podkategorii.

Zrobiłem takie zapytanie:

  1. SELECT produkt.id_produkt AS ID_produkt, produkt.nazwa AS nazwa2, produkt.cena_netto AS netto2, produkt.zdjecie AS zdjecie2, kategoria.nazwa AS nazwa3, podkategoria.nazwa AS nazwa4 FROM produkt
  2.  
  3. JOIN kategoria ON (produkt.id_kategoria = kategoria.id_kategoria)
  4. JOIN podkategoria ON (produkt.id_podkategoria = podkategoria.id_podkategoria)
  5.  
  6. WHERE kategoria.id_kategoria='$katID' AND podkategoria.id_podkategoria='$podkatID'
  7.  
  8. GROUP BY id_produkt


I w pierwszym przypadku kiedy link jest długi (ma dwa GETy) działa super. Kiedy chcę wyświetlić tylko cała kategorię nie mam nic. Zmodyfikowałem to tak:

  1. SELECT produkt.id_produkt AS ID_produkt, produkt.nazwa AS nazwa2, produkt.cena_netto AS netto2, produkt.zdjecie AS zdjecie2, kategoria.nazwa AS nazwa3, podkategoria.nazwa AS nazwa4 FROM produkt
  2.  
  3. JOIN kategoria ON (produkt.id_kategoria = kategoria.id_kategoria)
  4. JOIN podkategoria ON (produkt.id_podkategoria = podkategoria.id_podkategoria)
  5.  
  6. WHERE kategoria.id_kategoria='$katID' OR (kategoria.id_kategoria='$katID' AND podkategoria.id_podkategoria='$podkatID')
  7.  
  8. GROUP BY id_produkt


Wtedy działa cała kategoria, lecz, gdy chce wyświetlić tylko elementy z podkategorii (dwa GETy) to wyświetla mi i tak całą kategorię. Coś pewnie jest źle w zapytaniu, ale już troszkę nad tym myślę i ciężko mi coś wyłapać.
Go to the top of the page
+Quote Post
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


  1. WHERE kategoria.id_kategoria='$katID' OR (kategoria.id_kategoria='$katID' AND podkategoria.id_podkategoria='$podkatID')


za pomocą $_GET wysyłasz $katID i $podkatID. Więc zobacz co masz powyżej.
Najpierw sprawdzasz:
  1. WHERE kategoria.id_kategoria='$katID'

Prawda czy fałsz? Prawda, więc pobiera wszystkie rekordy z całej kategorii. Usuń ten warunek, w przypadku, kiedy ktoś podał podkategorię


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
arlid
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 16.06.2007

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


Dzięki. Źle zrozumiałem zapytanie i myślałem, że
  1. WHERE kategoria.id_kategoria='$katID' OR (kategoria.id_kategoria='$katID' AND podkategoria.id_podkategoria='$podkatID')


wykona pierwszy LUB drugi człon i będzie bardziej inteligentne smile.gif
Go to the top of the page
+Quote Post
Daimos
post
Post #4





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Cytat(arlid @ 4.08.2015, 09:15:45 ) *
Dzięki. Źle zrozumiałem zapytanie i myślałem, że
  1. WHERE kategoria.id_kategoria='$katID' OR (kategoria.id_kategoria='$katID' AND podkategoria.id_podkategoria='$podkatID')


wykona pierwszy LUB drugi człon i będzie bardziej inteligentne smile.gif


Dokładnie jak mówisz, wykona pierwszy LUB drugi człon, więc rekord może spełniać pierwszy warunek LUB drugi. Więc nie chodzi tu o brak inteligencji zapytania wink.gif Po prostu musisz skorzystać z AND, lub posłużyć się samą podkategorią.


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
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 Aktualny czas: 22.08.2025 - 09:54