Som uitrekenen aan de hand van datum

Status
Niet open voor verdere reacties.

gonzo31

Gebruiker
Lid geworden
11 jan 2007
Berichten
143
Hallo,

Ik heb een tabel met een datumtijd kolom en een waarden kolom.
Nu wil ik de waarden van alle rijen van vandaag optellen en weergeven.
Daarna wil ik het resultaat van de huidige maand optellen en weer laten geven en als laatste
het resultaat van het huidige jaar.
Als de eerste maar werkt (per huidige dag) dan moet de rest niet al te moeilijk zou ik zeggen.

Ik heb nu de volgende code:
PHP:
$dayyieldSum = mysql_query("SELECT SUM(etoday) AS y, DATE(dt1) FROM tabel WHERE dt1 BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY") or die ('Invalid query: '.mysql_error());
en verderop:
PHP:
<?php echo $dayyieldSum[y] ?>

dt1 heeft een datetime structuur, etoday is een float. Wellicht dat dit al niet goed is, maar er moet een decimaal getal (tot op 2 decimalen) ingevoerd worden en die invoerwaarde wordt bepaald door een print_float functie.

Ik doe duidelijk iets niet goed en ik heb al zo veel vormen geprobeerd en dit is de laatste waar ik aangeland ben maar ik kom er gewoon niet meer uit. Ook op internet en dit forum kan ik geen oplossing vinden dus hopelijk kan iemand een hint geven danwel een stukje code voor me opzetten. Alvast bedankt!
Arjan
 
Inmiddels ben ik aangeland bij het volgende:
PHP:
$dayyieldQuery = "SELECT SUM(etoday) FROM table WHERE dt1 = (DATE_SUB(CURDATE(), INTERVAL 1 DAY))";
$dayyieldSum = mysql_query($dayyieldQuery) or die ('Invalid query: '.mysql_error());

while($dayyieldRow = mysql_fetch_array($dayyieldSum)) {
	$dyield[y] = $dayyieldRow[etoday];
}

En verderop:
PHP:
Uitkomst dayyieldsum veld <?php echo $dyield[y] ?>

Alle foutmeldingen zijn verdwenen maar ik krijg nog steeds geen getal terug. Ik heb zelf 2 rijen in de tabel gezet, datum aangepast op die van vandaag en een waarde 5 en 10 in etoday ingevuld. Ik verwacht dus het getal 15 terug maar tot op heten zie ik niets...
 
Waarschijnlijk komt dat omdat je het veld uit de database niet juist aanroept.

Wanneer je een functie gebruikt voor een kolom dan is het handig om een "AS" te gebruiken voor de naam:

PHP:
$dayyieldQuery = "SELECT SUM(etoday) AS SumEtoday FROM table WHERE dt1 = (DATE_SUB(CURDATE(), INTERVAL 1 DAY))";
$dayyieldSum = mysql_query($dayyieldQuery) or die ('Invalid query: '.mysql_error());

while($dayyieldRow = mysql_fetch_assoc($dayyieldSum)) {
	$dyield['y'] = $dayyieldRow['SumEtoday'];
}

En verderop:
PHP:
Uitkomst dayyieldsum veld <?php echo $dyield['y'] ?>

Ik vind het vreemd dat je geen foutmeldingen kreeg voor de aanroep richting de $dyield-array.
Dit:
PHP:
<?php echo $dyield[y] ?>
kan volgens mij alleen wanneer "y" een constante is.

Controleer dus voor de zekerheid hoe je error-reporting staat: http://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display

Verder wil ik je aanraden het gebruik van mysql_*-functies te vermijden, deze bestaan sinds PHP 5.5 niet meer. Vervang deze door mysqli_* of werk met PDO :)
 
Laatst bewerkt:
Hoi Tha Devil,

Bedankt voor je reply. Dat met
PHP:
AS
is wel een goede en heb ik gelijk geïmplementeerd. Echter, nog niets....
Maar, als ik
PHP:
WHERE DATE(dt1) =
invul, dan loopt de som wel goed. Al krijg ik alleen de waarden van gisteren en niet van vandaag :(
Ik denk dat ik een
PHP:
BETWEEN
nodig heb in dat geval...

Wat betreft mysqli, ik zal op een gegeven moment wel moeten, maar het is een hobby project en aangezien ik nog wel aardig uit mysql kom heb ik er bewust niet voor gekozen om sqli aan te leren.

Bedankt!
Arjan
 
Al krijg ik alleen de waarden van gisteren en niet van vandaag :(

Als ik hier naar kijk is dat toch logisch?
[sql]DATE_SUB(CURDATE(), INTERVAL 1 DAY)[/sql]

Zoek je niet deze query:
[sql]
SELECT
SUM(etoday) AS SumEtoday
FROM
table
WHERE dt1 = CURDATE()
[/sql]
 
Ik had deze net te pakken maar hier nog geen update geplaatst. Werkt als een zonnetje nu, bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan