Bedrag per maand weergeven
Januari: 10,00
Februari: 12,00
Maart: 9,00
etc.
Ik heb als tabel 'omzet'
omzet_id [int 2]
datum [date]
bedrag dec[7,2]
Dit doe je door de bedragen op te tellen (met SUM()) en te groeperen (met GROUP BY) op grond van de maand. Er bestaan functies in MySQL voor het uitlezen van o.a. het maanddeel en het jaardeel van een datum (DATE) veld.
Zoiets dus:
Code (php)
1
2
3
4
2
3
4
SELECT MONTH(datum) AS maand, SUM(bedrag) AS totaal
FROM omzet
WHERE YEAR(datum) = 2016
GROUP BY maand
FROM omzet
WHERE YEAR(datum) = 2016
GROUP BY maand
Dit kan mogelijk nog verder geoptimaliseerd worden. Maar dit is in ieder geval iets dat het gewenste resultat heeft waarschijnlijk.
Gewijzigd op 19/02/2016 15:08:55 door Thomas van den Heuvel
De omzet van januari is en verder op de omzet van december?
1 - 15,-
2 - 30,-
4 - 10,-
5 - 12,-
9 - 12,-
Alleen hoe kan ik in mijn document op een bepaalde plek het totaal van december krijg.
Ik ga meestal voor de verdeel-en-heers strategie, te meer om e.e.a. leesbaar te houden. Je zou de resultaten onder kunnen brengen in een eenvoudige data-structuur, bijvoorbeeld een array. Deze zou je zo complex kunnen maken als je wilt. Een eenvoudige variant is bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$omzet = array(
// index: maandnummer
1 => array('januari', 0), // eerste positie: maandnaam, tweede positie: omzet voor die maand
2 => array('februari', 0),
3 => array('maart', 0),
4 => array('april', 0),
5 => array('mei', 0),
6 => array('juni', 0),
7 => array('juli', 0),
8 => array('augustus', 0),
9 => array('september', 0),
10 => array('oktober', 0),
11 => array('november', 0),
12 => array('december', 0)
);
?>
$omzet = array(
// index: maandnummer
1 => array('januari', 0), // eerste positie: maandnaam, tweede positie: omzet voor die maand
2 => array('februari', 0),
3 => array('maart', 0),
4 => array('april', 0),
5 => array('mei', 0),
6 => array('juni', 0),
7 => array('juli', 0),
8 => array('augustus', 0),
9 => array('september', 0),
10 => array('oktober', 0),
11 => array('november', 0),
12 => array('december', 0)
);
?>
Het bovenstaande kan als initialisatie dienen. Als je de query uitvoert kun je de omzet van een specifieke maand uit een databaseresultaat in dit array overschrijven. Het weergeven van de omzet van een specifieke maand komt dan neer op het uitlezen van de tweede array-waarde van een maand (met index 1, want je nummert indices vanaf 0), dus voor december:
Je zou ook nog kunnen overwegen om het array te voorzien van een extra dimensie voor jaartal, en de maand-arrays te voorzien van "keys" in plaast van indexen, zodat je een wat leesbaardere variant hebt. Zoals ik al zei, je kunt het zo uitgebreid maken als je wilt.
EDIT: Als je enkel geinteresseerd bent in de omzet van een specifieke maand zou je natuurlijk ook je query hierop aan kunnen passen met WHERE ... MONTH(datum) = 12. Indien de query dan geen resultaten oplevert, is er geen omzet voor die maand.
Gewijzigd op 19/02/2016 16:02:53 door Thomas van den Heuvel
Als je dan ook deze query uitvoert na het opzetten van de connectie, dan krijg je ook de maand in het Nederlands: $query = "SET lc_time_names = 'nl_NL'";
De vraag is of je dit in je query zelf wilt regelen. Ikzelf vind het fijner om dit elders te doen, omdat je, als je dan besluit om iets in de weergave te veranderen, je je query doorgaans niet hoeft aan te passen (dit valt wat mij betreft onder separation of concerns).
Je bent natuurlijk vrij om alles direct te regelen in je query en dit dan ook elke keer hier te veranderen indien je de weergave wilt aanpassen.