Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
motorolka24
Dlaczego w tym zapytanie nie bierze mi pod uwagę sortowania? Wydaje sie ze jest wszystko dobrze a jednak zle bo nie sortuje.
  1. SELECT produkt.id, produkt.nazwa, produkt.cena, produkt.opis, produkt.ogladalnosc, produkt.dostepne
  2. FROM produkt, produkt_kategoria WHERE produkt.dostepne=true AND produkt.nazwa LIKE '%aa%' OR produkt.opis LIKE '%aa%' AND produkt_kategoria.kategoria_id=12 AND produkt.id=produkt_kategoria.produkt_id GROUP BY produkt.id ORDER BY produkt.id DESC LIMIT 0, 20
grzegorz_m
Czy produkt.id jest unikatowe? Domyślam się, że to klucz główny... Czy tak rzeczywiście jest?

Jeśli w tabeli produkt mamy kolumnę id i każdy jej rekord jest unikatowy, to jaki jest sens stosowania GROUP BY na tej kolumnie? Może chciałeś tam wpisać GROUP BY produkt.nazwa?!

Zrobiłem 2 przykładowe tabele (coś jak u Ciebie) i wszystko działa tak jak powinno. Oczywiście ja pytałem o coś innego -chciałem wyłonić ilość produktów o identycznej nazwie oraz których nazwa jest w tabeli "kategoria".

  1. SELECT prod.nazwa AS 'nazwa', count(*) AS 'ilość'
  2. FROM produkt AS prod, produkt_kategoria AS kat
  3. WHERE prod.nazwa = kat.nazwa
  4. GROUP BY prod.nazwa
  5. ORDER BY prod.nazwa DESC


W wyniku mam:

  1. nazwa | ilość
  2. b 1
  3. a 2


Jak widać działa zgodnie z zamierzeniem. Pytanie czego Ty tak naprawdę oczekiwałeś po swoim zapytaniu.

Podsumowując uważam, że błąd jest po klauzuli GROUP BY -mam nadzieję, że to pomoże


P.S.

Radzę stosować aliasy.
motorolka24
Dałam GROUP BY bo nie wiadomo czemu zapytanie zwracając mi wynik powtarza niektóre rekordy po pare razy. Wiesz może dlaczego?
grzegorz_m
Zwraca ponieważ jest ich wiele -zastosuj distinct, który eliminuje duplikaty.

Ewentualnie przedstaw strukturę tabel produkt, produkt_kategoria oraz to czego konkretnie oczekujesz od zapytania, a ja pomogę Ci napisać to zapytanie poprawnie. Chyba, że distinct rozwiąże sprawę...



P.S.

Odradzam pisania zapytań sql na zasadzie prób i błędów. Musisz dokładnie wiedzieć czego od niego oczekujesz i co to zapytanie zwróci. Jeżeli będziesz strzelał to faktycznie może zadziałać ...na jakiś czas, a po kilku miesiącach wyskoczy problem, którego nie będziesz w stanie zdiagnozować (może to coś z bazą, może to coś z aplikacją, a może...).


Pozdrawiam
motorolka24
produkt
---------
id
nazwa
cena
opis
ogladalnosc
dostepne

produkt_kategoria
-------------------
id
kategoria_id
produkt_id

kategoria
----------
id
nazwa

i chce wyświetlić produkt.id, produkt.nazwa, produkt.cena, produkt.opis, produkt.ogladalnosc, produkt.dostepne dla produktów które zawierają jakiś tekst w nazwie lub opisie oraz są przypisane do wybranej kategorii
grzegorz_m
Cytat
które zawierają jakiś tekst w nazwie lub opisie

Czy chodzi o tekst jako litery a nie same cyfry? Czy chodziło Ci o to, że po prostu nie może być to wartość NULL (czyli pole nie może być puste)? A może jednak (na co wskazuje Twoje wcześniejsze zapytanie do bd) chodzi o wskazanie tekstu, który powinien w nich występować np. "at" -niezależnie czy będzie to "automAT", "laminAT", "ATrament", "hp AT3432", ...

I żeby nie przeciągać sprawy napiszę jak to powinno wyglądać przy założeniach:

1) poszukujemy wszystkiego z tabeli produkt

a ) gdzie: nazwa zawiera dwie litery "a" w kupie -np. "taat" LUB opis zawiera "ola" czyli np. "Cola light".

b ) ORAZ: id danego produktu (tego, który przeszedł weryfikację w punkcie a) znajduje się w tabeli produkt_kategoria

  1. SELECT *
  2. FROM produkt AS p
  3. WHERE (p.nazwa LIKE '%aa%' OR 
  4.   p.opis LIKE '%ola%') AND 
  5.   p.id IN (
  6.   SELECT produkt_id 
  7.   FROM produkt_kategoria
  8.   )
  9. ORDER BY p.id




pozdrawiam
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.