Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc z zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
aren
  1. id int(),id_klienta int(),id_produktu int(), data_zakupu int()

Jak powinno wyglądać pojedyncze zapytanie do mysql, by ten mi zwrócił listę klientów, którzy zakupili minimum dwa, wcześniej przeze mnie zdefiniowane produkty? Chciałbym w wyniku mieć id_klienta, ilosc_produktow (oraz ew. listę tych produktów).
JoShiMa
A to:
  1. id int(),id_klienta int(),id_produktu int(), data_zakupu int()


jest w jednej tabeli?

Jeśli tak to

  1. SELECT id_klienta, sum(id_produktu) FROM tabela GROUP BY id_klienta


Nie jestem pewna, czy zadziała taki warunek
  1. SELECT id_klienta, sum(id_produktu) AS ilosc FROM tabela WHERE ilosc > 1 GROUP BY id_klienta


Jeśli chcesz mieć jeszcze listę produktów to musiałbyś wczytać wszystko i obrabiać pod php.
osiris
  1. SELECT id_klienta, COUNT(*) AS ile_produktow
  2. FROM zakupy WHERE id_produktu IN (1,2,3,4)
  3. GROUP BY id_klienta
  4. HAVING COUNT(*) >= 4


poprawiłem
JoShiMa
osiris masz racje moje zapytanie pokaże klientów, którzy kupili conajmniej dwa produkty a nie o to chodziło, ale u Ciebie powinno być chyba >1 a nie >= 4
aren
Niestety, ale zwraca mi:
  1. ERROR 1140 (42000): Mixing of GROUP COLUMNS (MIN(),MAX(),COUNT(),...) WITH no GROUP COLUMNS IS illegal IF there IS no GROUP BY clause

Jeszcze jedna sprawa, o której nie wspomniałem. Może się zdarzyć, że klient zakupi kilkakrotnie ten sam produkt, więc zwiększa to sumę ilości produktów, a ja chcę policzyć sumę różnych produktów (tzn. jeśli zakupi jakiś produkt dwa razy, policzy to jako 1 itd.).
JoShiMa
  1. GROUP BY id_produktu
osiris
  1. SELECT id_klienta, COUNT(DISTINCT id_produktu) AS ile_produktow
  2. FROM zakupy WHERE id_produktu IN (1,2,3,4)
  3. GROUP BY id_klienta
  4. HAVING COUNT(DISTINCT id_produktu) >= 4
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.