Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Warunek WHERE przy zliczaniu rekordów
Forum PHP.pl > Forum > Przedszkole
szczabik
Mam takie zapytanie
  1. SELECT SUM(pkt) AS pkt, COUNT(druzyna_id) AS wygranych FROM mecze WHERE druzyna_id='1' GROUP BY druzyna_id

I jak dodać do tego warunek WHERE by liczyło tak gdy pole zdobyte_bramki jest wieksze stracone_bramki
i dodałem to tak
  1. SELECT SUM(pkt) AS pkt, COUNT(druzyna_id) WHERE zdobyte_bramki > stracone_bramki AS wygranych FROM mecze WHERE druzyna_id='1' GROUP BY druzyna_id

ale wywala wtedy błąd
MMX3
Zawsze struktura musi być taka
  1. SELECT
  2. FROM
  3. WHERE

Jeżeli chcesz coś liczyć warunkowo to musisz dodać podzapytanie.
http://chcebycbogaty.pl/programowanie/mysql_41.html
Pierwszy link z googla na temat podazpytań
lukaszgolder
Nie możesz użyć 2 razy WHERE w tym samym zapytaniu. Musisz to zrobić tak:
  1. SELECT SUM(pkt) AS pkt, COUNT(druzyna_id) AS wygranych FROM mecze WHERE druzyna_id='1' && zdobyte_bramki > stracone_bramki GROUP BY druzyna_id
szczabik
Mam taką tabele
rmecz_id |druzyna_id |pkt |zdobyte_bramki |stracone_bramki |przeciwnik_id
1 1 0 1 4 4
2 2 3 3 0 2
3 1 0 3 5 6
4 1 3 2 1 5
5 1 0 1 2 9
5 1 1 1 1 3

I takim kodem
  1. SELECT SUM(pkt) AS pkt, COUNT(druzyna_id) AS ile, SUM(zdobyte_bramki) AS zdobyte,
  2. SUM(stracone_bramki) AS stracone FROM mecze WHERE druzyna_id='1' GROUP BY druzyna_id");

zliczam ile drużyna rozegrała meczy ile zdobyła bramek ile straciła i ile ma pkt
I chciałem do tego za pomocą
  1. COUNT(druzyna_id) WHERE (zdobyte_bramki > stracone_bramki) AS wygranych,
  2. COUNT(druzyna_id) WHERE (zdobyte_bramki < stracone_bramki) AS przegranych,
  3. COUNT(druzyna_id) WHERE (zdobyte_bramki = stracone_bramki) AS remis


Policzyć ile druzyna ma wygranych przegranych i zremisowanych meczy
i nie wiem jak to zrobić ?

Zrobiłem tak ale wywala Nieznana tabela 't'
  1. SELECT t.*, SUM(pkt) AS pkt, COUNT(druzyna_id) AS ile, SUM(zdobyte_bramki) AS zdobyte,
  2. SUM(stracone_bramki) AS stracone, (SELECT COUNT(druzyna_id)
  3. FROM mecze r
  4. WHERE (r.zdobyte_bramki > t.zdobyte_bramki)) AS wygrane
  5. , (SELECT COUNT(druzyna_id)
  6. FROM mecze r
  7. WHERE (r.zdobyte_bramki < t.zdobyte_bramki)) AS przegrane
  8. , (SELECT COUNT(druzyna_id)
  9. FROM mecze r
  10. WHERE (r.zdobyte_bramki = t.zdobyte_bramki)) AS remis FROM mecze WHERE druzyna_id='1' GROUP BY druzyna_id
Kildyt
Ja bym to zrobił przy pomocy pętli while (wyświetlamy rekordy) i w warunku sprawdzamy jaki był to mecz.
zegarek84
Cytat(szczabik @ 11.11.2008, 19:29:45 ) *
Mam taką tabele
rmecz_id |druzyna_id |pkt |zdobyte_bramki |stracone_bramki |przeciwnik_id
1 1 0 1 4 4
2 2 3 3 0 2
3 1 0 3 5 6
4 1 3 2 1 5
5 1 0 1 2 9
5 1 1 1 1 3


  1. SELECT SUM(pkt) AS pkt, COUNT(druzyna_id) AS ile, SUM(zdobyte_bramki) AS zdobyte,
  2. SUM(stracone_bramki) AS stracone, sum(zdobyte_bramki > stracone_bramki) AS wygranych, sum(zdobyte_bramki < stracone_bramki) AS przegranych, sum(zdobyte_bramki = stracone_bramki) AS remis FROM mecze GROUP BY druzyna_id




ale proponuję jeszcze dorzucić chociaż w select druzyna_id by było wiadomo której się to tyczy winksmiley.jpg - warunki where tutaj są dodane niejawnie, po prostu są sumowane wyniki działań matematycznych - dzięki działaniom matematycznym można nieźle filtrować dane i prawie nie ma ograniczeń - pisze prawie bo pewnie ktoś by wymyslil przykład nie do rozwiązania ale ;p
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.