Avatar billede computopic Nybegynder
14. januar 2003 - 18:26 Der er 9 kommentarer og
1 løsning

En lidt svær SQL sætning med count()

Min SQL: $sqlstr_id_stat = "SELECT date, takst, count(status) as antal FROM smser WHERE  date LIKE '$visdato%' AND gatename = '$gatename' GROUP BY date";

Giver dette resultat:
date, takst, antal
2002-01-01 18 124
2002-01-02 18 122
2002-01-03 18 127

Det er også lige som det skal være.. men nu er det bare sådan at antal ikke bare skal være antal.. men kun de records der: where status = 'er sendt' skal tælles.. men rasten skal forblive som det er..
For hvis jeg indsætter status = 'er sendt' i WHERE sætningen.. får jeg ikke alle records med i rasten af forspørgslen..

Er det sort?
Avatar billede arne_v Ekspert
14. januar 2003 - 18:41 #1
Når du bruger GROUP BY skal du ikke bruge WHERE men HAVING.
Avatar billede morw Nybegynder
14. januar 2003 - 18:51 #2
arne_v> hvor ser du det?
Avatar billede morw Nybegynder
14. januar 2003 - 18:55 #3
HAVING er kun nødvendig hvis det er en værdi der vedrører GROUP BY delen. Altså hvis f.eks. HAVING antal < 100
Avatar billede arne_v Ekspert
14. januar 2003 - 18:55 #4
Det hedder SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ...
og er mig bekendt ANSI SQL standard.
Avatar billede morw Nybegynder
14. januar 2003 - 18:59 #5
En ting er at der er noget der hedder HAVING  - noget andet er hvornår det skal bruges.
Avatar billede arne_v Ekspert
14. januar 2003 - 18:59 #6
morw>

Hm. Det er muligt du har ret. At count(status) ikke kræver HAVING.

Men hvad er så problemet ?
Avatar billede morw Nybegynder
14. januar 2003 - 19:05 #7
Hvorfor er det at du ikke sætter status = 'er sendt'  i din where-clause? Antal er jo 0 for de dage der ikke kommer med så. Men dem skal du stadig bruge i dit recordset?

Hvis det sidste er nødvendig tror jeg at du kan lave en join.
Avatar billede proaccess Nybegynder
14. januar 2003 - 22:25 #8
$sqlstr_id_stat = "SELECT date, takst, SUM(IF(status='er sendt',1,0)) Antal FROM smser WHERE date LIKE '$visdato%' AND gatename='$gatename' GROUP BY date, takst";
Avatar billede morw Nybegynder
14. januar 2003 - 22:37 #9
uhh smart. Har egentlig aldrig brugt if i mysql
Avatar billede computopic Nybegynder
15. januar 2003 - 00:19 #10
Kanon svar! Det virker perfekt nu..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester