SUM de beste oplossing?
BRes = beste resultaat van 2006
LRes = laatste resultaat van 2006
AGem = gemiddelde afstand 2006
A = totale afstand van 2006
ATot = totale afstand
In ieder record worden de volgende benodigde gegevens opgeslagen:
Resultaat
Afstand 1
Afstand 2
Afstand 3
Nu kan de waarde van de gegevens ook 0 zijn en dan moet die niet meegeteld worden voor een eventuele deling. Voor een optelling is het natuurlijk niet erg.
Nu heb ik gezien dat je veel kan met een MySQL query. Zo lijkt me SUM een oplossing voor ATot. Maar bij de gegevens die alleen betrekking hebben over 2006 moet je daar dus op filteren. Kan dat ook in SQL of moet ik dat erbuiten doen?
Heeft iemand tips en eventueel een opzetje? Hoe kan ik dit het beste aanpakken?
Wil je een grafiekje met foto
of
Voor om te vergelijken welk dingen hoeveel afstanden heeft gelegd?
Nee, die gegevens wil ik gewoon tonen. Als info zeg maar.
ok
Maar goed, bijvoorbeeld voor gemiddelde afstand, hoe wil je het hebben? Het gemiddelde van afstand 1, 2 en 3? Of het gemiddelde van alle afstanden 1?
het gemiddelde van alle afstanden. Dus niet alleen van 1 bv.
SELECT MAX(resultaat) AS beste_resultaat
WHERE YEAR(datumtijd) = 2006
FROM tabelnaam
Laatste resultaat van 2006
SELECT resultaat
FROM tabelnaam
WHERE YEAR(datumtijd) = 2006
ORDER BY datumtijd DESC
LIMIT 1
Gemiddelde afstand 2006
SELECT AVG(afstand1 + afstand2 + afstand3) AS gemiddelde_afstand
FROM tabelnaam
WHERE YEAR(datumtijd) = 2006
totale afstand 2006
SELECT SUM(afstand1 + afstand2 + afstand3) AS totale_afstand
FROM tabelnaam
WHERE YEAR(datumtijd) = 2006
totale afstand
SELECT SUM(afstand1 + afstand2 + afstand3) AS totale_afstand
FROM tabelnaam
Mijn datumtijd veld is van het datetime formaat. Moet ik niet alleen 2006 invullen maar compleet dus 2006-01-01 00:00:00??
WHERE DATE_FORMAT(datumtijd, '%Y') = 2006
Dus het resultaat YEAR('2006-12-12 11:12:13') is '2006'.
edit: werkt blijkbaar dus alleen op date velden...
edit2: volgens de handleiding werkt YEAR() wel alleen date velden, maar net getest en ook gewoon op datetime formaten.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Zo ziet het er nu uit:
$BResquery = "SELECT MAX(resultaat) AS BRes WHERE DATE_FORMAT(post_date, '%Y') = 2006 FROM news";
Welke foutmelding krijg je?
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/phphulp.nl/httpdocs/gsn/startpagina.php on line 49
Je moet altijd controleren of je mysql query wel gelukt is en zo niet dan moet je natuurlijk wel de foutmelding weer laten geven:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = "blabla";
if(!$result = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
// verdere verwerking van je script...
}
?>
$sql = "blabla";
if(!$result = mysql_query($sql))
{
trigger_error(mysql_error());
}
else
{
// verdere verwerking van je script...
}
?>
Notice: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE DATE_FORMAT(post_date, '%Y') = 2006 FROM news' at line 1 in /var/www/vhosts/phphulp.nl/httpdocs/gsn/startpagina.php on line 52
Zet je trouwens met dat stukje script de foutmeldingen voor de gehele pagina aan? Ik krijg nu van een heel ander deel ook ineens een foutmelding namelijk.
En om alle foutmeldingen aan te zetten, zet je dit helemaal boven aan je script:
Als ik nu terugkijk naar je voorbeeld dan staat het ook bij beste resultaat verkeert. En bij de rest wel goed. Ach het werkt dat is het belangrijkste.
Bedankt voor de (snelle) reacties.
Okee graag gedaan. Waarom zaten er eigenlijk vier dagen tussen mijn antwoord en je reactie?
Nu ik die foutcontrole aanzet, kom ik erachter dat ik soms niet zo netjes programmeer:-) Komt goed...
Ja, die foutcontrole is essentieel. In het begin ervaar je het alleen maar als lastig, maar al snel wil je echt niet meer zonder!