Bedrag per maand weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

19/02/2016 14:51:27
Quote Anchor link
Hoe kan ik een bedrag per maand weergeven. Als voorbeeld:

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]
 
PHP hulp

PHP hulp

20/03/2019 11:26:44
 
Thomas van den Heuvel

Thomas van den Heuvel

19/02/2016 15:08:16
Quote Anchor link
Ik ga er vanuit dat je een soort query wilt opbouwen? In MySQL?

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT MONTH(datum) AS maand, SUM(bedrag) AS totaal
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
 
Kees Mulder

Kees Mulder

19/02/2016 15:24:00
Quote Anchor link
Oke dat bedoelde ik ook maar kan ik nu ook op een manier op mijn pagina neerzetten:

De omzet van januari is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['omzet-januari'];?>
en verder op de omzet van december?
 
- SanThe -

- SanThe -

19/02/2016 15:31:21
Quote Anchor link
In het geval van de query van Thomas:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['maand'].' '.$row['totaal'];?>
 
Kees Mulder

Kees Mulder

19/02/2016 15:44:22
Quote Anchor link
Oke alleen krijg ik nu:

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

19/02/2016 15:54:49
Quote Anchor link
De eerdergenoemde query levert trouwens (inderdaad) geen resultaten op voor maanden dat er geen omzet was. Nu zou je deze ruimte (jan-dec) kunnen opspannen in de query zelf, wat volgens database-puristen mogelijk een betere oplossing is (?), maar dit is iets wat je ook in PHP kunt regelen.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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)
);

?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $omzet[12][1];
?>

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
 
Jan de Laet

Jan de Laet

20/02/2016 13:00:13
Quote Anchor link
Ipv MONTH(datum) uit het voorbeeld van Thomas kun je ook MONTHNAME(datum) gebruiken.
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'";
 
Thomas van den Heuvel

Thomas van den Heuvel

20/02/2016 15:19:04
Quote Anchor link
Er zijn meerdere invullingen denkbaar voor het weergeven van een maandnaam, maar dat lijkt mij in dit vraagstuk bijzaak. Wanneer je de data in enige vorm uit je database kunt toveren kun je nog altijd schuiven met de formattering een weergave hiervan.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.