Sorteren met Group BY wil net niet
Ik heb de volgende query:
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?
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?
Gesponsorde koppelingen:
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)
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:
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.
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.
Je gebruikt GROUP BY iig niet juist
zie http://www.phphulp.nl/php/tutorials/3/521/
zie http://www.phphulp.nl/php/tutorials/3/521/



