SQL count meerdere maanden
Beste,
Ik ben met een systeem bezig en daar zit een onderdeel statistieken in, echter loop ik met de query wat vast en te stoeien.
In een database staat het volgende:
id -> 1
dag -> 01
maand -> 01
jaar -> 2011
begintijd -> 07:00
eindtijd -> 08:00
totaletijd -> 01:00
Nu wil ik van de verschillende maanden, getallen genereren hoeveel dagen er gewerkt zijn en later ook optellen hoeveel uur er per maand gewerkt is. Deze getallen komen uiteindelijk in een staafdiagram (google api). Nu is mijn vraag wat is de beste, snelste en makkelijkste manier om dit te doen.
Want ik heb nu het volgende, maar dat lijkt mij niet echt de snelste oplossing:
(even los van de beveiliging! want ik weet dat deze nu niet goed zit ;) is nu even niet belangrijk)
Nu zou ik zeg maar 12x zo een query moeten maken voordat ik alle waardes van dit jaar zou hebben. Volgens mij kan dit beter met Group By maar ik kom er maar niet uit hoe ik de waardes van de verschillende maanden dan bij elkaar krijg. Dus:
maand 1: 5 werkdagen
maand 2: 1 werkdagen
maand 3: 2 werkdagen
maand 4: 9 werkdagen
maand 5: 5 werkdagen
Mogelijk kan iemand mij even een duwtje de goede richting in helpen. Alvast bedankt!
Ik ben met een systeem bezig en daar zit een onderdeel statistieken in, echter loop ik met de query wat vast en te stoeien.
In een database staat het volgende:
id -> 1
dag -> 01
maand -> 01
jaar -> 2011
begintijd -> 07:00
eindtijd -> 08:00
totaletijd -> 01:00
Nu wil ik van de verschillende maanden, getallen genereren hoeveel dagen er gewerkt zijn en later ook optellen hoeveel uur er per maand gewerkt is. Deze getallen komen uiteindelijk in een staafdiagram (google api). Nu is mijn vraag wat is de beste, snelste en makkelijkste manier om dit te doen.
Want ik heb nu het volgende, maar dat lijkt mij niet echt de snelste oplossing:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = "SELECT COUNT(*) AS dagen_juli FROM tijdregistratie WHERE eigenaar='".$gebruikersnaam."' AND maand='07' AND jaar='2011'";
$res = mysql_query($sql);
$reg = mysql_fetch_array($res);
$wj = $reg['dagen_juli'];
?>
$sql = "SELECT COUNT(*) AS dagen_juli FROM tijdregistratie WHERE eigenaar='".$gebruikersnaam."' AND maand='07' AND jaar='2011'";
$res = mysql_query($sql);
$reg = mysql_fetch_array($res);
$wj = $reg['dagen_juli'];
?>
(even los van de beveiliging! want ik weet dat deze nu niet goed zit ;) is nu even niet belangrijk)
Nu zou ik zeg maar 12x zo een query moeten maken voordat ik alle waardes van dit jaar zou hebben. Volgens mij kan dit beter met Group By maar ik kom er maar niet uit hoe ik de waardes van de verschillende maanden dan bij elkaar krijg. Dus:
maand 1: 5 werkdagen
maand 2: 1 werkdagen
maand 3: 2 werkdagen
maand 4: 9 werkdagen
maand 5: 5 werkdagen
Mogelijk kan iemand mij even een duwtje de goede richting in helpen. Alvast bedankt!
Select maand, count(dag) as aantal_dagen from tabel group by maand order by maand asc
Dit is vanaf mn mobiel getypt, vandaar het ontbreken van de opmaak. Echter heb je met bovenstaande query nog wel het probleem dat wanneer 2 of meer records op dezelfde dag betrekking hebben dat dan het aantal dagen niet klopt. Mocht het niet lukken om dit op te lossen dan zal ik er op een later tijdstip naar kijken.
Dit is vanaf mn mobiel getypt, vandaar het ontbreken van de opmaak. Echter heb je met bovenstaande query nog wel het probleem dat wanneer 2 of meer records op dezelfde dag betrekking hebben dat dan het aantal dagen niet klopt. Mocht het niet lukken om dit op te lossen dan zal ik er op een later tijdstip naar kijken.
Heb het werkend gekregen :) Maar ik loop nog ergens tegen aan. Ik heb ook nog enkele totaal tijden in mij database staan (bijvoorbeeld: 09:15, 15:55, 03:20) op geteld kom je dan op 28:30. Echter rekent COUNT() enkel de uren dus dan kom je op 27 uur uit. Hoe pak ik dit aan?
Gebruik sum() in plaats van count en kijk eens naar time_to_sec() en sec_to_time(). Dus iets als sec_to_time(sum(time_to_sec(tijd)))
Gewijzigd op 24/08/2011 23:54:55 door Arjan -
Jup na wat stoei werk is het allemaal gelukt. Super bedankt!




