Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Zliczenia: wiele do wielu, Grupuje, ale zlicza iloczyn kartezjanski
Reigon
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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.

Ten post edytował Reigon 28.02.2007, 15:51:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Łukasz O.
post
Post #2





Grupa: Zarejestrowani
Postów: 191
Pomógł: 5
Dołączył: 13.01.2007

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


jak wygląda Twoja tabela?


--------------------
"Don't tell me you want a bridge - show me the canyon you want to cross" Giuseppe Delena
Go to the top of the page
+Quote Post
Reigon
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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

Ten post edytował Reigon 4.03.2007, 23:23:01
Go to the top of the page
+Quote Post
Kosmi
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

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


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Reigon
post
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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)
Go to the top of the page
+Quote Post
Kosmi
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

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


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Reigon
post
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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.

Ten post edytował Reigon 6.03.2007, 20:35:10
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: 21.08.2025 - 14:17