Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Zliczenia: wiele do wielu
Forum PHP.pl > Forum > Bazy danych > MySQL
Reigon
Witam,
chcialem stworzyc TOP 10 najchetniej zamawianych produktow, wszystko by bylo w porzadku, gdyby nie to, ze wiele tych samych produktow (lecz rozniacych sie np. kolorem) ma ten sam numer kodowy (oprocz tego jest takze uniklane id). W zwiazku z tym nie interesuje mnie np. zebym w TOP 10 mial np. monitor bialy i monitor czarny, tylko po prostu monitor.

Aktualnie robie to nieelegancko, czyli tak:

  1. SELECT COUNT( * ) AS ile, id_zam
  2. FROM statystyki GROUP BY id_zam
  3. ORDER BY ile DESC LIMIT 10


No i mam 10 najchetniej kupowanych produktow. I teraz wystarczy, ze w petli 10 razy odwolam sie do id_produktu, gdzie na koncu zapytania dam GROUP BY id_produktu.

Mowiac scislej mam np.
7 produktow o numerze 1234 (7 roznych kolorow)
i 13 zamowien tego produktu (o numerze 1234 - nie interesuje mnie jakie to byly kolory)

Probowalem cos takiego:
  1. SELECT COUNT(*) AS ile,id_content
  2. FROM statystyki,produkty WHERE id_content=id_zam
  3. GROUP BY id_content,id_zam
  4. ORDER BY ile DESC


grupuje mi ladnie, tyle ze count zlicza caly iloczyn kartezjanski :/

Probowalem z podzapytaniem (zeby w juz mial pogrupowane najpierw produkty, a pozniej grupowal po zamowieniach), ale cos sie zawiesza - moze jakos zle je skonstruowalem.

Jezeli ktos widzi rozwiazanie prosilbym o przyklad.
Łukasz O.
jak wygląda Twoja tabela?
Reigon
prosze bardzo, wersja uproszczona - myslalem ze widac to w/w zapytaniach

statystyki:

ID
ID_ZAM (zapisane id_content, ktore jest not unique - ten sam zamowiony produkt, lecz z innych kategori (np. rozny kolor))
DATA

produkty:

ID
ID_CONTENT (not unique)
DESC
KATEGORIA
Kosmi
Spróbuj to:

  1. SELECT DESC, id_content, COUNT(*) AS ile FROM produkty WHERE id_content IN (SELECT id_zam FROM statystyki GROUP BY id_zam) GROUP BY id_content ORDER BY ile DESC LIMIT 10;


Powinno działać.

Pozdrawiam
Kosmi
Reigon
Niestety - tak jak pisalem w pierwszym poscie. Motyw z podzapytaniem zabija mi proces bazy danych, uzycie procka 100% i totalna zawiecha...same podzapytanie wykonuje sie w mikrosekundach, ale juz calosc to masakra (moze przez to, ze tabela produkty posiada prawie pol miliona rekordow, a statystyki 2000 jak na razie)
Kosmi
W pierwszym poście pisałeś też:
Cytat(Reigon @ 28.02.2007, 15:50:40 ) *
moze jakos zle je skonstruowalem.



Próbowałeś wogóle odpalić to co Ci podałem?
Może problem leży w konstrukcji bazy (tabel). Masz jakiekolwiek indeksy pozakładane?

Pozdrawiam
Kosmi
Reigon
Tak, odpalone dokladnie to Twoje (wczesniej identyczne napisalem sobie, ale jeszcze raz sprobowalem), indeksy sa zalozone na id_content i id_zam oczywiscie. Wiadomo, ze podzapytania sa niewydajne, ale to juz jest po prostu niewydolne :/
Jak na razie nadal robie to w petli, 10 + 1 zapytan - czyli tak jak podalem w pierwszym poscie



Ma ktos jakis inny pomysl, bez podzapytania, bo prawdopodobnie zwis jest przez to, ze dla kazdego z 500 tys rekordow wykonywane jest podzapytanie.
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.