Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> COUNT, GROUP BY i HAVING w jednym - jak ?
legorek
post 10.12.2005, 21:14:17
Post #1





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Witam!

[MIAŁO BYĆ W MYSQL, jesli mozna proszę o przeniesienie - mój błąd]

Mam ciężki orzech do zgryzienia

Mam tabele, która w uproszczeniu wygląda tak:

Kod
]id | id_usera | nick_usera | oceny_plus | oceny_minus
1       12            ala               5          12
2       12            ala               4          7
3       99            tomek             3          0
4       13            ola               11         0


I takie zapytanie:

  1. SELECT `nick_usera`, SUM(`oceny_plus`) AS plusy, SUM(`oceny_minus`) AS minusy, (SUM(`oceny_plus`)/(SUM(`oceny_plus`)+SUM(`oceny_minus`))*100) AS procenty
  2. FROM forum_posty GROUP BY `id_usera` HAVING (plusy+minusy >= 10) ORDER BY procenty DESC, plusy DESC"


Które działa bez problemu, zwraca listę nicków i te informacje o które pytam. Teraz chciałbym przerobić to zapytanie, żeby zamiast informacji, zwracało liczbę wierszy, ale nie mam pojęcia jak wcisnąć COUNT. Kombinowałem ale zwraca mi wartośc z kosmosu.

Mój mysql to 4.0.cośtam

Ten post edytował legorek 10.12.2005, 21:16:41


--------------------
Go to the top of the page
+Quote Post
nospor
post 10.12.2005, 21:21:55
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
[MIAŁO BYĆ W MYSQL, jesli mozna proszę o przeniesienie - mój błąd]
Przenosze. A nastepnym razem uzyj opcji raportuj.

Co do pytania:
  1. SELECT count(*)
  2. FROM forum_posty GROUP BY `id_usera` HAVING (plusy+minusy >= 10) ORDER BY procenty DESC, plusy DESC


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
legorek
post 10.12.2005, 21:38:34
Post #3





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Cytat(nospor @ 2005-12-10 20:21:55)
Cytat
[MIAŁO BYĆ W MYSQL, jesli mozna proszę o przeniesienie - mój błąd]
Przenosze. A nastepnym razem uzyj opcji raportuj.

OK, zapamiętam.
A co do Twojego zapytania, to juz próbowałem, to już go próbowałem, w swojej wersji czyli:

  1. SELECT count(*)
  2. FROM forum_posty GROUP BY `id_usera` HAVING (SUM(`oceny_plus`)+SUM(`oceny_minus`) >= 10)
, ale zwraca wynik z kosmosu, bo prawidłowo powinno być 46 a zwraca 81. Mogę podać link do strony z danymi na PM, wolałbym nie publicznie.

Ten post edytował legorek 10.12.2005, 21:39:23


--------------------
Go to the top of the page
+Quote Post
nospor
post 10.12.2005, 21:49:20
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




count zwraca ci liczbe rekordow, ktore spelniaja warunki. Skoro twoje zapytanie zwracalo ci wczesniej wlasciwe rekordy to count zwraca tylko ich liczbe. Tak wiec chyba rekordy co wczesniej otrzymywales nie byly jednak takimi co chciales.

Co do PW i analizy danych to za bardzo nie mam czasu.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SongoQ
post 10.12.2005, 22:27:15
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Pytanie tylko jakiego COUNT chesz wyciagnac. Ile userwoz zwrocilo, czy ile kazdy user ma rekordow. Bo z pytania trudno sie domyslic.


--------------------
Go to the top of the page
+Quote Post
legorek
post 10.12.2005, 22:52:14
Post #6





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


No własnie troszkę źle napisałem, chce wiedzieć ile userów zwróciło. Zła liczba brało się stąd że

  1. SELECT count(`id_usera`)
  2. FROM forum_posty GROUP BY `id_usera` HAVING (SUM(`oceny_plus`)+SUM(`oceny_minus`) >= 10)


zwraca wiele rekordów, a ja myślałem że zwraca tylko 1. I to wiele jest wartością którą szukam. Powiem inaczej potrzebuje

  1. SELECT count(count(`id_usera`))
  2. FROM forum_posty GROUP BY `id_usera` HAVING (SUM(`oceny_plus`)+SUM(`oceny_minus`) >= 10)
, ale takie coś oczywiście nie działa.


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 10.12.2005, 23:02:57
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


No to inaczej jak podzapytanie chyba nie zrobisz

  1. SELECT COUNT(*)
  2. FROM ( SELECT count(`id_usera`)
  3. FROM forum_posty GROUP BY `id_usera` HAVING (SUM(`oceny_plus`)+SUM(`oceny_minus`) >= 10)
  4. )


--------------------
Go to the top of the page
+Quote Post
legorek
post 10.12.2005, 23:11:36
Post #8





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Problemem jest to, że nie mam mysql 4.1, więc po prostu zrobiłem potem num_rows, ale jest to rozwiązanie troche okrężne.


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 10.12.2005, 23:16:13
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Moze to Cie zainteresuje SQL_CALC_FOUND_ROWS przyklad jest w manualu:)


--------------------
Go to the top of the page
+Quote Post
legorek
post 10.12.2005, 23:28:51
Post #10





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Zainteresowało, ba nawet rozwiązało mój problem. Bardzo przydatne, szczególnie, przy stronicowaniu.


--------------------
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 Wersja Lo-Fi Aktualny czas: 13.06.2025 - 18:18