SUM de beste oplossing?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mario_verm

Mario_verm

14/12/2006 21:56:00
Quote Anchor link
Ik ben van plan om wat gegevens uit een tabel te verzamelen en daar wat statistieken uit te halen. Dus het wordt wat optellen en gemiddelden. Het gaat om de volgende gegevens:
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?
 
PHP hulp

PHP hulp

19/11/2024 08:33:55
 
Kumkwat Trender

Kumkwat Trender

14/12/2006 21:59:00
Quote Anchor link
Voor wat maak je dit?

Wil je een grafiekje met foto

of

Voor om te vergelijken welk dingen hoeveel afstanden heeft gelegd?
 
Mario_verm

Mario_verm

14/12/2006 22:02:00
Quote Anchor link
Nee, die gegevens wil ik gewoon tonen. Als info zeg maar.
 
Kumkwat Trender

Kumkwat Trender

14/12/2006 22:04:00
Quote Anchor link
ok
 
Jan Koehoorn

Jan Koehoorn

14/12/2006 22:35:00
Quote Anchor link
Je hebt drie velden met een afstand er in? Het is meestal geen goed idee om drie velden met dezelfde soort info te hebben namelijk.

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?
 
Mario_verm

Mario_verm

14/12/2006 22:37:00
Quote Anchor link
het gemiddelde van alle afstanden. Dus niet alleen van 1 bv.
 
Jan Koehoorn

Jan Koehoorn

14/12/2006 22:46:00
Quote Anchor link
Beste resultaat:

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
 
Mario_verm

Mario_verm

18/12/2006 22:46:00
Quote Anchor link
Oke, het werkt allemaal zolang ik de regel WHERE YEAR(datumtijd) = 2006 maar weglaat.

Mijn datumtijd veld is van het datetime formaat. Moet ik niet alleen 2006 invullen maar compleet dus 2006-01-01 00:00:00??
 
Jan Koehoorn

Jan Koehoorn

18/12/2006 22:49:00
Quote Anchor link
Oh, dan werkt YEAR alleen op DATE velden en niet op DATETIME velden. In dat geval kun je dit proberen:

WHERE DATE_FORMAT(datumtijd, '%Y') = 2006
 
Joren de Wit

Joren de Wit

18/12/2006 22:50:00
Quote Anchor link
Nee dat hoeft niet, aangezien de YEAR() functie toegepast op een datumtijd veld alleen het jaar als resultaat geeft.

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
 
Mario_verm

Mario_verm

18/12/2006 22:56:00
Quote Anchor link
Hmm lijkt hem ook niet te zijn...

Zo ziet het er nu uit:

$BResquery = "SELECT MAX(resultaat) AS BRes WHERE DATE_FORMAT(post_date, '%Y') = 2006 FROM news";
 
Joren de Wit

Joren de Wit

18/12/2006 22:57:00
Quote Anchor link
Welke foutmelding krijg je?
 
Mario_verm

Mario_verm

18/12/2006 22:59:00
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

18/12/2006 23:02:00
Quote Anchor link
Dat komt waarschijnlijk omdat je mysql query in de soep loopt en ik vermoed dat je daar geen foutafhandeling gebruikt.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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...
}
?>
 
Mario_verm

Mario_verm

18/12/2006 23:10:00
Quote Anchor link
Nu krijg ik het volgende terug:

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.
 
Joren de Wit

Joren de Wit

18/12/2006 23:14:00
Quote Anchor link
Ik zie al wat er niet klopt in je query: je bent het FROM gedeelte vergeten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT MAX(resultaat) AS BRes
FROM tabelnaam
WHERE YEAR(post_date) = 2006


En om alle foutmeldingen aan te zetten, zet je dit helemaal boven aan je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
 
Mario_verm

Mario_verm

18/12/2006 23:22:00
Quote Anchor link
JAAA het werkt.

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.
 
Jan Koehoorn

Jan Koehoorn

18/12/2006 23:25:00
Quote Anchor link
Okee graag gedaan. Waarom zaten er eigenlijk vier dagen tussen mijn antwoord en je reactie?
 
Mario_verm

Mario_verm

18/12/2006 23:28:00
Quote Anchor link
Tijdgebrek...


Nu ik die foutcontrole aanzet, kom ik erachter dat ik soms niet zo netjes programmeer:-) Komt goed...
 
Jan Koehoorn

Jan Koehoorn

18/12/2006 23:28:00
Quote Anchor link
Ja, die foutcontrole is essentieel. In het begin ervaar je het alleen maar als lastig, maar al snel wil je echt niet meer zonder!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.