Voor een klant van mij die online games maakt moet ik de highscores van de games bijhouden en bijv. de hoogste score van elk uur bijhouden.
Nu heb ik wat problemen met het berekenen van de highscore.
Ik gebruik hiervoor de volgende SQL-statement:
SELECT *,time / 1000 AS time, DATE_FORMAT(timestamp, '%e.%c.%Y %H:%i:%S') AS timestamp, MIN(time),MIN(moves),hour(timestamp) AS HT
FROM game
WHERE DAYOFMONTH(timestamp) = DAYOFMONTH(NOW())
AND MONTH(timestamp) = MONTH(NOW())
AND YEAR(timestamp) = YEAR(NOW())
AND pid = 0
GROUP BY HT
ORDER BY time,moves ASC
Deze SQL moet dus de records ophalen van een dag bijv. woensdag en dan van elk uur de hoogste score. Dus er hebben bijvoorbeeld in uur 22 op woensdag 10 mensen gespeeld waarvan 1 de laagste moves en tijd heeft gehaald (het gaat hier om een memory-game).
De database is als volgt opgezet:
ID, pid, name, phone, email, moves, time, email_sent, timestamp
--
En het gaat bijv. om deze records:
50, 0, naam, tel, email, 30, 3500, 0, 20030924222051
51, 0, naam, tel, email, 50, 3800, 0, 20030924222182
52, 0, naam, tel, email, 80, 4000, 0, 20030924222285
note: in bovenstaande records zijn 30,50,80 de moves en 3500,3800,4000 de tijd.
Bovenstaande records zijn dan van het uur 22, de SQL-statement moet de beste uit dit uur halen qua moves en tijd ophalen, maar dit gebeurt niet helaas
om een of andere donkere reden
Met mijn SQL-statement haalt die de 2de rij (met ID 51) op wat heel onlogisch is omdat je dan zou denken dat die de hoogste of de laagste dan zou nemen.
Uiteraard vraag ik dit niet aan jullie omdat ik het eventjes niet weet, ik ben hier ondertussen al meer dan 4 uur mee bezig
Mocht iemand het weten dan zou ik heel dankbaar zijn
Nu heb ik wat problemen met het berekenen van de highscore.
Ik gebruik hiervoor de volgende SQL-statement:
SELECT *,time / 1000 AS time, DATE_FORMAT(timestamp, '%e.%c.%Y %H:%i:%S') AS timestamp, MIN(time),MIN(moves),hour(timestamp) AS HT
FROM game
WHERE DAYOFMONTH(timestamp) = DAYOFMONTH(NOW())
AND MONTH(timestamp) = MONTH(NOW())
AND YEAR(timestamp) = YEAR(NOW())
AND pid = 0
GROUP BY HT
ORDER BY time,moves ASC
Deze SQL moet dus de records ophalen van een dag bijv. woensdag en dan van elk uur de hoogste score. Dus er hebben bijvoorbeeld in uur 22 op woensdag 10 mensen gespeeld waarvan 1 de laagste moves en tijd heeft gehaald (het gaat hier om een memory-game).
De database is als volgt opgezet:
ID, pid, name, phone, email, moves, time, email_sent, timestamp
--
En het gaat bijv. om deze records:
50, 0, naam, tel, email, 30, 3500, 0, 20030924222051
51, 0, naam, tel, email, 50, 3800, 0, 20030924222182
52, 0, naam, tel, email, 80, 4000, 0, 20030924222285
note: in bovenstaande records zijn 30,50,80 de moves en 3500,3800,4000 de tijd.
Bovenstaande records zijn dan van het uur 22, de SQL-statement moet de beste uit dit uur halen qua moves en tijd ophalen, maar dit gebeurt niet helaas
Uiteraard vraag ik dit niet aan jullie omdat ik het eventjes niet weet, ik ben hier ondertussen al meer dan 4 uur mee bezig
Mocht iemand het weten dan zou ik heel dankbaar zijn