Selecteren per speler max waarde
Ik heb een tabel in mysql met sectortijden erin(van een race). Het ziet er als volgt uit:
id, trackID, checkID, score, player
Hier is checkID het id van de sector, score is de tijd op deze sector, en player vanzelfsprekend de speler die de tijd heeft neergezet.
Nu wil ik de ranglijst hieruit krijgen, iedere speler kan maar 1x in deze ranglijst voorkomen, maar wel vaker in de tabel. Ik had hiervoor de volgende sql bedacht:
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT checkID,player,MIN(score) AS score FROM checkpoints WHERE trackID = 1 GROUP BY player ORDER BY checkID,id";
?>
$sql = "SELECT checkID,player,MIN(score) AS score FROM checkpoints WHERE trackID = 1 GROUP BY player ORDER BY checkID,id";
?>
Deze pakt echter alleen maar de eerste sector(heb getest in phpmyadmin). Iemand die weet hoe ik 'm alle sectoren kan laten pakken?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
DISTINCT player,
checkID,
score
FROM
checkpoints
WHERE
trackID = 1
ORDER BY
checkID,id
DISTINCT player,
checkID,
score
FROM
checkpoints
WHERE
trackID = 1
ORDER BY
checkID,id
Zoiets? Overigens is het niet slim om op checkID/id te sorteren. Een id is niets, je kunt beter op velden sorteren waar echt iets in staat waar je iets mee doet.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT
checkID,player,MIN(score) AS score
FROM checkpoints
WHERE trackID = 1
GROUP BY player
ORDER BY checkID,id
checkID,player,MIN(score) AS score
FROM checkpoints
WHERE trackID = 1
GROUP BY player
ORDER BY checkID,id
2 kolommen in de SELECT (die niet in een aggregate functie staan) en 1 kolom in de GROUP BY. De query is dus onmogelijk en hoort een dikke foutmelding op te leveren.
Alle kolommen die in de SELECT staan en die niet in een aggragate functie staan, MOETEN (!!!) in de GROUP BY staan.
Dat MySQL hier geen foutmelding op geeft, zegt veel over de kwaliteit van MySQL. Het is wiskundige onzin en hoort dus een foutmelding op te leveren.
@frank: ja, ik heb mysql niet gemaakt hè :P
Gewijzigd op 01/01/1970 01:00:00 door Deze site laat je geen account deleten