SELECT t.score, p.login, p.nickname, p.id FROM times AS t, players AS p WHERE p.id = t.playerID AND t.challengeID = 7 GROUP BY t.playerID ORDER BY t.score ASC
Iedere playerID in de tabel times heeft meerdere tijden op dezelfde baan. Nu selecteert dit script wel maar 1 tijd voor iedere speler, maar de tijd die het script selecteert is niet de beste van die speler. Het is gewoon de eerste tijd die die speler gereden heeft. Dus hoe zorg ik ervoor dat ie voor iedere speler apart ook nog eens de beste tijd selecteert?
Wat je in zo'n gevallen kan doen: neem een select van een select.
Een voorbeeld (activiteiten gegroepeerd per organisator, met telkens het record met het meest aantal gasten op die activiteit)
SELECT *
FROM
(
SELECT *
FROM activiteiten
ORDER BY aantal_gasten DESC
) as t1
GROUP BY organisator
ORDER BY organisator
Zo kan je eerst de middelste select sorteren op aflopende score en de buitenste select groepeert alles zoals het hoort.
Kan je daarmee zelf je sql aanpassen?
EDIT:
Ik denk dat het zo-iets zou moeten worden:
SELECT t.score, p.login, p.nickname, p.id
FROM
(
SELECT t.score, p.login, p.nickname, p.id
FROM times AS t, players AS p
WHERE p.id = t.playerID AND t.challengeID = 7
ORDER BY t.score ASC
) AS t1
GROUP BY t.playerID
Soms moet je wel oppassen met de alias. Zie dat de alias herkend wordt (wat lastig uit te leggen op een aantal woorden) ...
Het is op een soortgelijke manier gelukt, ik heb de scores tussen haakjes gezet met een ORDER en dat AS t. Dus eigenlijk is alleen het times AS t gedeelte nu anders. Ty voor de tip
?
Onbekende gebruiker
13-11-2009 23:21
Plaats even stukje code dan. Dan kunnen anderen er nog eens op terug kijken.