Laatste 12 maanden
Hallo, ik maak een script dat de stats van een website bijhoudt. Ik wil de stats van de laatste 12 maanden tonen. Dat werkte perfect tot op vandaag, 31 augustus.
getnlmonth() is een functie om de maanden in het nederlands om te zetten en getstats2() haalt stats uit de database.
Het is nu eigenlijk die tijd die ik in orde moet krijgen. Ik krijg ni de laatste 12 maanden, maar dit:
Laatste 12 maanden
augustus 2010 3 (31)
juli 2010 0 (0)
juli 2010 0 (0)
mei 2010 0 (0)
mei 2010 0 (0)
maart 2010 0 (0)
maart 2010 0 (0)
januari 2010 0 (0)
december 2009 0 (0)
december 2009 0 (0)
oktober 2009 1 (456)
oktober 2009 1 (456)
augustus 2009 0 (0)
Dit is een probleem dat zich alleen zal voordoen op de 31e van een maand. Morgen is dit probleem er niet meer, maar ik wil het wel opgelost krijgen...
Hoe los ik dit op?
Ruben
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$i = 0;
while($i<=12){
echo '
<tr bordercolor="#0099CC">
<td width="105" align="left">'.getnlmonth(date("F Y", mktime(0, 0, 0, date("m") - $i, date("d"), date("Y")))).'</td>
<td width="105" align="right">'.getstats2(date("m-Y", mktime(0, 0, 0, date("m") - $i, date("d"), date("Y")))).'</td>
</tr>';
$i++;
}
?>
$i = 0;
while($i<=12){
echo '
<tr bordercolor="#0099CC">
<td width="105" align="left">'.getnlmonth(date("F Y", mktime(0, 0, 0, date("m") - $i, date("d"), date("Y")))).'</td>
<td width="105" align="right">'.getstats2(date("m-Y", mktime(0, 0, 0, date("m") - $i, date("d"), date("Y")))).'</td>
</tr>';
$i++;
}
?>
getnlmonth() is een functie om de maanden in het nederlands om te zetten en getstats2() haalt stats uit de database.
Het is nu eigenlijk die tijd die ik in orde moet krijgen. Ik krijg ni de laatste 12 maanden, maar dit:
Laatste 12 maanden
augustus 2010 3 (31)
juli 2010 0 (0)
juli 2010 0 (0)
mei 2010 0 (0)
mei 2010 0 (0)
maart 2010 0 (0)
maart 2010 0 (0)
januari 2010 0 (0)
december 2009 0 (0)
december 2009 0 (0)
oktober 2009 1 (456)
oktober 2009 1 (456)
augustus 2009 0 (0)
Dit is een probleem dat zich alleen zal voordoen op de 31e van een maand. Morgen is dit probleem er niet meer, maar ik wil het wel opgelost krijgen...
Hoe los ik dit op?
Ruben
Gewijzigd op 31/08/2010 02:13:13 door Ruben Vanhoeyveld
Laat het rekenen met data en tijden over aan de database, ga dat niet in PHP doen. Om records van de laatste 12 maanden op te halen, gebruik je een query met bijvoorbeelde de volgende WHERE clausule:
Uiteraard zou je het interval variabel kunnen maken waardoor je eenvoudig andere gegevens op kunt halen...
Uiteraard zou je het interval variabel kunnen maken waardoor je eenvoudig andere gegevens op kunt halen...
@ Blanche,
Als je 300,000 records hebt, en je wilt alleen de records terugkrijgen die binnen de juiste datum vallen en je gaat dat via SQL uitrekeken, is dat niet erg traag? aangezien de rekensom voor elk record wordt gedaan?
Kan je dan niet beter alles ophalen en met php gaan filteren? Ik heb het zelf nooit getest, maar ik heb het vermoeden dat SQL deze strijd verliest.
Als je 300,000 records hebt, en je wilt alleen de records terugkrijgen die binnen de juiste datum vallen en je gaat dat via SQL uitrekeken, is dat niet erg traag? aangezien de rekensom voor elk record wordt gedaan?
Kan je dan niet beter alles ophalen en met php gaan filteren? Ik heb het zelf nooit getest, maar ik heb het vermoeden dat SQL deze strijd verliest.
In theorie is SQL altijd sneller dan PHP Erik ;-) Als je het met PHP gaat doen, dan moet je eerst de data ophalen, verwerken, en dan pas uitrekenen in PHP. Met SQL sla je de laatste stap over :-)
Wat Erik bedoelt is dat je nu elke keer de som CURRENT_DATE - INTERVAL 12 MONTH doet.
Je zou moeten uitzoeken of dat inderdaad het geval is of dat je database hier slim mee om gaat. Anders kan het verstandig zijn om het tijdstip in PHP te berekenen en dat mee te geven in je query.
Je zou moeten uitzoeken of dat inderdaad het geval is of dat je database hier slim mee om gaat. Anders kan het verstandig zijn om het tijdstip in PHP te berekenen en dat mee te geven in je query.
Ik heb het slecht verwoord, maar dat is inderdaad wat ik bedoel TJVB :)
euhm.. hallo iedereen...
Ik wil eigenlijk gewoon de laatste twaalf maanden in woorden, zoals het voorbeeld dat ik onderaan in mijn post zette. Dat moet lukken met PHP, maar hoe?
EDIT
Ik heb nog wat verder gezocht en vond dit iets dat werkt (zie 2e deel). Maar als ik dat inplant in mijn code in het tabelletje, werkt het niet meer... wat gaat er fout?
dat geeft:
Laatste 12 maand
augustus 2010 0
juni 2010 0
april 2010 0
februari 2010 0
december 2009 0
oktober 2009 0
augustus 2009 0
juni 2009 0
april 2009 0
februari 2009 0
december 2008 0
oktober 2008 0
het valt me op dat ik maar 6 maanden per jaar krijg, en het dus ergens telkens een amand overslaat.
Terwijl ik hier dit krijg:
Aug-10Jul-10Jun-10May-10Apr-10Mar-10Feb-10Jan-10Dec-09Nov-09Oct-09Sep-09
Wat dus exact is wat ik nodig heb. Waar zit het verschil??? In mijn gebruikte function getnlmonth() zit geen probleem. Als ik die weghaal, blijft het probleem.
Extra EDIT:
Ik gebruikte twee keer $month--
Vandaar de sprong...
Bedankt allemaal =D
Ik wil eigenlijk gewoon de laatste twaalf maanden in woorden, zoals het voorbeeld dat ik onderaan in mijn post zette. Dat moet lukken met PHP, maar hoe?
EDIT
Ik heb nog wat verder gezocht en vond dit iets dat werkt (zie 2e deel). Maar als ik dat inplant in mijn code in het tabelletje, werkt het niet meer... wat gaat er fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$month = date('m')+1;
$year = date('y');
for ($i=1; $i<=12; $i++)
{
echo '
<tr bordercolor="#0099CC">
<td width="105" align="left">'.getnlmonth(date('F Y', mktime(0,0,0,$month--,0,$year))).'</td>
<td width="105" align="right">'.getstats2(date('m-Y', mktime(0,0,0,$month--,0,$year))).'</td>
</tr>';
}
?>
$month = date('m')+1;
$year = date('y');
for ($i=1; $i<=12; $i++)
{
echo '
<tr bordercolor="#0099CC">
<td width="105" align="left">'.getnlmonth(date('F Y', mktime(0,0,0,$month--,0,$year))).'</td>
<td width="105" align="right">'.getstats2(date('m-Y', mktime(0,0,0,$month--,0,$year))).'</td>
</tr>';
}
?>
dat geeft:
Laatste 12 maand
augustus 2010 0
juni 2010 0
april 2010 0
februari 2010 0
december 2009 0
oktober 2009 0
augustus 2009 0
juni 2009 0
april 2009 0
februari 2009 0
december 2008 0
oktober 2008 0
het valt me op dat ik maar 6 maanden per jaar krijg, en het dus ergens telkens een amand overslaat.
Code (php)
Terwijl ik hier dit krijg:
Aug-10Jul-10Jun-10May-10Apr-10Mar-10Feb-10Jan-10Dec-09Nov-09Oct-09Sep-09
Wat dus exact is wat ik nodig heb. Waar zit het verschil??? In mijn gebruikte function getnlmonth() zit geen probleem. Als ik die weghaal, blijft het probleem.
Extra EDIT:
Ik gebruikte twee keer $month--
Vandaar de sprong...
Bedankt allemaal =D
Gewijzigd op 31/08/2010 12:00:44 door Ruben Vanhoeyveld




