Selecteer de laatste 30 dagen, oplopend
Ik ben bezig om statistieken uit te draaien uit de database, ik gebruik daar onderstaande query voor. Ik zou alleen graag willen dat ik de laatste 30 dagen vertoon, doe ik dit met interval erachter? Want wil het wel oplopend hebben, dat stel op de 30e vraag ik mijn statistieken op, dat ik in de tabel ze oplopend van 1 naar 30 zie.
<code>
"SELECT * FROM stats WHERE`username`='".mysql_real_escape_string($login_user)."' LIMIT 30");
</code>
Code (php)
1
"SELECT * FROM stats WHERE`username`='".mysql_real_escape_string($login_user)."' GROUP BY dagen DESC LIMIT 30");
DESC of ASC 1 van de 2 is goed. Bij de ene zie je de 1e 30 en bij de andere de laatste 30 dagen.
"SELECT * FROM stats WHERE`username`='".mysql_real_escape_string($login_user)."' GROUP BY datum DESC LIMIT 30");
Nu toont hij in een tabel zoals onderstaand als ik het uitdraai?
dagen: 1 2 3 4 5
Aantal: 10 15 22 45 49
Het enige wat je wil is sorteren op dagen van klein naar groot en tellen tot 30.. (volgens mij) dus ja dan zou dit het moeten zijn.
Haha het voorbeeld was tot 30... maar stel ik bezoek de pagina statistieken op de 15 September dan wil ik dus de statistieken zien van bijvoorbeeld 15 Augustus tot 15 September...
dan zet je er 31 neer?
Haha dat snap ik, als ik 15 doe laat hij 15 resultaten zien, maar mijn vraag is, als ik dus het veld datum heb, wat een datetime veld is, en gebruik de query zoals gegevens, laat hij dan inderdaad als voorbeeld, van de 14 aug tot de 14 sep zien in tabel? :P
Voer de query uit en test het zou ik zeggen :)!
Gewijzigd op 28/08/2011 23:09:44 door Jacco Brandt
ID | DATUM | WAARDE | USER
1 | 20110815 | 15 | Tom
2 | 20110816 | 22 | Tom
3 | 20110817 | 25 | Tom
Als ik hier de query "SELECT * FROM stats WHERE`username`='".mysql_real_escape_string($login_user)."' LIMIT 30");" krijg ik netjes 30 resultaten te zien. Op het moment alleen dat ik boven de 30 id's kom laat hij het niet meer goed zien. Nu wil ik dus dat in de query de laatste 30 waardes geselecteerd worden maar met datum oplopend gesorteerd.
Wat heb ik geprobeerd:
LIMIT 30 ASC - Werkt niet ivm neemt de eerste 30 bij deze query
LIMIT 30 DSC - Werkt niet ivm de laatste 30 neemt maar aflopend
Ik dacht zelf aan iets met interval maar kom hier niet verder mee.
Wat ik dus wil is als ik de query draai en ik gooi het in een tabel dat ik dit te zien krijg als ik d pagina stats bezoek:
DATUM | 11-08-2011 | 12-08-2011 | 13-08-2011
Waarde| 15 | 18 | 25
SELECT ... FROM ... WHERE ... ORDER BY ... ASC/DESC LIMIT ...
SELECT....FROM...WHERE...LIMIT 30 ORDER BY ASC
Hierdoor selectered hij de laatste 30 id's stel ik heb 1 tot 100 id's dan wil ik dat hij de id's van 70 tot 100 selecteerd oplopend van 70 naar 100. Is het 101 dan wil ik dat hij automatisch 71 tot 101 neemt of met datum als voorbeeld, vandaag zou ik willen dat hij de waarden van 29 Juli tot 29 Augustus laat zien en morgen van 30 Juli tot 30 Augustus
Ik heb ongeveer in het hoofd hoe het moet, maar uitwerking blijf ik op hangen.....
Gewijzigd op 29/08/2011 15:48:46 door Tom Wellink
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// get number of rows
$query = mysql_query("SELECT COUNT(`id`) AS `count` FROM `stats`");
$max = mysql_fetch_assoc($query);
$max = $max['count'];
// select rows
$query = mysql_query("SELECT * FROM `stats` ORDER BY `datum` ASC LIMIT ".($max - 30).", 30");
while ($row = mysql_fetch_assoc($query)) {
// dingen doen.
}
?>
// get number of rows
$query = mysql_query("SELECT COUNT(`id`) AS `count` FROM `stats`");
$max = mysql_fetch_assoc($query);
$max = $max['count'];
// select rows
$query = mysql_query("SELECT * FROM `stats` ORDER BY `datum` ASC LIMIT ".($max - 30).", 30");
while ($row = mysql_fetch_assoc($query)) {
// dingen doen.
}
?>