Situatie
Ben bezig met een php script voor het bijhouden van het brandstofverbruik van m'n auto. Daarbij gebruik ik de volgende tabel:
Nu wil ik van de laatste x toevoegingen de som van de hoeveelheid getankte liters brandstof hebben.
Voorbeeldtabel: van de laatste vier toevoegingen wil ik de som hebben:
Het resultaat zou moeten zijn: 44.02 + 26.11 + 18.06 + 41.13 = 129.32 liter.
Ik maak gebruik van de volgende query om dit resultaat te krijgen:
Het resultaat is echter niet dus niet wat ik verwacht. Ik verwacht dat sumLitersFuel de som van de vier gevonden resultaten bevat, maar ik krijg het volgende:
wat heb ik zelf gedaan?
Een hoop geklooid met behulp van PHPmyAdmin en gezocht met Google.
http://dev.mysql.com/doc/mysql/en/SELECT.html
http://dev.mysql.com/doc/mysql/en/Unnamed_views.html
http://dev.mysql.com/doc/mysql/en/GROUP-BY-Functions.html
De laatste pagina vertelt het een en ander over de SUM functie, maar helaas niet in combinatie met LIMIT.
http://forums.devshed.com/showthread.php?t=161386
Toont het limiteren van de resultaten door het between statement, maar dat levert ook niet het gewenste resultaat.
de Vraag
Hoe kan ik het door mij gewenste resultaat bereiken?
Ben bezig met een php script voor het bijhouden van het brandstofverbruik van m'n auto. Daarbij gebruik ik de volgende tabel:
code:
1
2
3
4
5
6
7
8
9
10
11
| CREATE TABLE `tbl_FuelCost` ( `iFuelCost_Id` int(11) NOT NULL auto_increment, `iFuelCost_Date` int(11) NOT NULL default '0', `iFuelCost_Mileage` int(11) NOT NULL default '0', `fFuelCost_AverageMileagePerDay` float NOT NULL default '0', `fFuelCost_LitersFuel` float NOT NULL default '0', `fFuelCost_FuelCost` float NOT NULL default '0', `fFuelCost_CostPerLiter` float NOT NULL default '0', `fFuelCost_FuelConsumptionPer100km` float NOT NULL default '0', PRIMARY KEY (`iFuelCost_Id`) ) TYPE=MyISAM AUTO_INCREMENT=177 ; |
Nu wil ik van de laatste x toevoegingen de som van de hoeveelheid getankte liters brandstof hebben.
Voorbeeldtabel: van de laatste vier toevoegingen wil ik de som hebben:
code:
1
2
3
4
5
6
7
8
9
| "168";"1085011200";"126087";"604";"39.54";"32.38";"0.819";"6.55" "169";"1086048000";"126852";"765";"44.89";"36.32";"0.809";"5.87" "170";"1086825600";"127648";"796";"45.1";"35.4";"0.785";"5.67" "171";"1087516800";"128441";"793";"44.36";"35";"0.789";"5.59" "172";"1088121600";"129101";"660";"38.73";"30.95";"0.799";"5.87" "173";"1088726400";"129850";"749";"41.13";"32.62";"0.793";"5.49" "174";"1088812800";"130159";"309";"18.06";"14.36";"0.795";"5.84" "175";"1088812800";"130665";"506";"26.11";"20.76";"0.795";"5.16" "176";"1089331200";"131397";"732";"44.02";"35.79";"0.813";"6.01" |
Het resultaat zou moeten zijn: 44.02 + 26.11 + 18.06 + 41.13 = 129.32 liter.
Ik maak gebruik van de volgende query om dit resultaat te krijgen:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| SELECT SUM(fFuelCost_LitersFuel) as sumLitersFuel, iFuelCost_Date, fFuelCost_FuelCost FROM tbl_FuelCost GROUP BY iFuelCost_date, fFuelCost_FuelCost ORDER BY iFuelCost_date DESC LIMIT 4 |
Het resultaat is echter niet dus niet wat ik verwacht. Ik verwacht dat sumLitersFuel de som van de vier gevonden resultaten bevat, maar ik krijg het volgende:
code:
1
2
3
4
5
6
7
8
| +------------------+----------------+--------------------+ | sumLitersFuel | iFuelCost_Date | fFuelCost_FuelCost | +------------------+----------------+--------------------+ | 44.0200004577637 | 1089331200 | 35.79 | | 18.0599994659424 | 1088812800 | 14.36 | | 26.1100006103516 | 1088812800 | 20.76 | | 41.1300010681152 | 1088726400 | 32.62 | +------------------+----------------+--------------------+ |
wat heb ik zelf gedaan?
Een hoop geklooid met behulp van PHPmyAdmin en gezocht met Google.
http://dev.mysql.com/doc/mysql/en/SELECT.html
http://dev.mysql.com/doc/mysql/en/Unnamed_views.html
http://dev.mysql.com/doc/mysql/en/GROUP-BY-Functions.html
De laatste pagina vertelt het een en ander over de SUM functie, maar helaas niet in combinatie met LIMIT.
http://forums.devshed.com/showthread.php?t=161386
Toont het limiteren van de resultaten door het between statement, maar dat levert ook niet het gewenste resultaat.
de Vraag
Hoe kan ik het door mij gewenste resultaat bereiken?
offtopic:
Klein extra vraagje: wie kan me de afwijkende decimalen verklaren? Ik weet dat PHP de neiging heeft floats te vernaggelen, maar by mySQL ben ik me daarvan niet bewust.
Klein extra vraagje: wie kan me de afwijkende decimalen verklaren? Ik weet dat PHP de neiging heeft floats te vernaggelen, maar by mySQL ben ik me daarvan niet bewust.