Sorteren met Group BY wil net niet
Code (php)
1
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?
Een voorbeeld (activiteiten gegroepeerd per organisator, met telkens het record met het meest aantal gasten op die activiteit)
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT *
FROM
(
SELECT *
FROM activiteiten
ORDER BY aantal_gasten DESC
) as t1
GROUP BY organisator
ORDER BY organisator
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:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
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
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) ...
Ik kan het echter niet zomaar testen.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
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
Plaats even stukje code dan. Dan kunnen anderen er nog eens op terug kijken.