query count minus vorige dag/id
Ik heb een cronjob welke dagelijks het aantal tweets van vandaag in de database plaatst.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
// verbinding maken
$query = "SELECT SUM(count) FROM archives";
$result = mysql_query($query) or die(mysql_error());
// Tonen resulaten
while($row = mysql_fetch_array($result)){
echo $row['SUM(count)'];
echo "<br />";
}
?>
Iedere dag plaats hij dit in de database, netjes met aantal tweets die dag gemaakt, nu wil ik alleen dat ie eigenlijk toont hoeveel tweets die dag precies gemaakt meer gemaakt zijn.
Hiervoor wil ik dus het resultaat min het vorige resultaat/dag/id doen (ik sla op met auto id increcement)
Hoe kan ik dit realiseren?
// verbinding maken
$query = "SELECT SUM(count) FROM archives";
$result = mysql_query($query) or die(mysql_error());
// Tonen resulaten
while($row = mysql_fetch_array($result)){
echo $row['SUM(count)'];
echo "<br />";
}
?>
Iedere dag plaats hij dit in de database, netjes met aantal tweets die dag gemaakt, nu wil ik alleen dat ie eigenlijk toont hoeveel tweets die dag precies gemaakt meer gemaakt zijn.
Hiervoor wil ik dus het resultaat min het vorige resultaat/dag/id doen (ik sla op met auto id increcement)
Hoe kan ik dit realiseren?
echo $row['blabla'];
Gewijzigd op 13/12/2010 14:24:02 door Tom Wellink
Ik heb alleen aangegeven hoe bovenstaand scriptje kan werken. Zoals jij het hebt staan zal het niet werken.
http://www.lsbeta.nl/twittertest/stats.php
Er komt nu dus een totaal uit, dat wordt opgeslagen in de database, nu wil ik dus dat dat morgen het totaal van die dag minus het resultaat van de vorige dag gedaan wordt...
Ik krijg toch echt een uitslag... hij telt alle apparte count onderdelen op, ene bevat 300, andere 400 en maakt daar totaal uitkomst van... zie --> Er komt nu dus een totaal uit, dat wordt opgeslagen in de database, nu wil ik dus dat dat morgen het totaal van die dag minus het resultaat van de vorige dag gedaan wordt...
Over het algemeen probeer je te vermijden om dubbele en berekende informatie in een database te steken.
Je kan dat altijd on the fly laten berekenen door mySQL (zie post van SanThe).
DAG AANTAL
1 500
2 900 (waren 1400 tweets, min de 500=900 gemaakt op dag 2)
3 2000 (waren 2900 tweets, min de 900= 2000 tweets gemaakt op dag 3)
Dus wil elke dag, als de cronjob draait om dingen op te slaan, dat hij het totaal aantal tweets - dag ervoor doet
Ik sla dus nu elke dag gewoon het totaal op wat er in totaal is, maar wil dat dus veranderen naar de echte gemaakte tweets...
Gewijzigd op 13/12/2010 17:06:02 door Tom Wellink
Het is dan simpel om te tellen, sommeren, per dag, per maand wat je maar wilt...
DIt heet datamodelleren.
Als je bv. op een forum ziet hoeveel posts er zijn in het totaal, is dat niet omdat dat getal ergens in een db is ingevuld. Telkens wordt die waarde berekend.
Stel dat je nu records uit het verleden verwijdert, dan klopt die waarde toch niet meer.
Zo is het bv. ook niet nodig om de dag van de week in een veld op te slaan als je de datum hebt. MySQL berekent de dag van de week zelf.
Drie keer dezelfde reactie, wat zijn we weer eensgezind ;-)
Omdat elke hashtag een eigen count heeft van x aantal tweets dat ie heeft tel ik die gewoon bij elkaar op zoals te zien was in mijn php code hierboven. Vervolgens las ik dit altijd uit eenmaal per dag en sloeg dit op, nu wil ik alleen vooral aan gaan tonen hoeveel per dag meer tweets er g earchiveerd worden (moet ik aantonen voor meer servercapaciteit te krijgen binnen t bedrijf) en wilde ik dus elke keer om middernacht als ie de count maakt van geheel, dat hij dat gewoon min de opgeslagen count van de vorige dag doet....
Eventueel zou je zo'n update kunnen laten uitvoeren door de (toevallige) eerste gebruiker van de dag die naar je site surft.