Selecteren per speler max waarde
Hallo,
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:
Deze pakt echter alleen maar de eerste sector(heb getest in phpmyadmin). Iemand die weet hoe ik 'm alle sectoren kan laten pakken?
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?
Gesponsorde koppelingen:
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.
Die query van jou werkt niet. Distinct had iets tegen meer dan 1 of 2 dingen selecten ofzo. Was ik al eerder achtergekomen, spelers komen nu in ieder geval meer dan 1x terug per sector
@frank: ja, ik heb mysql niet gemaakt hè :P
@frank: ja, ik heb mysql niet gemaakt hè :P
Gewijzigd op 01/01/1970 01:00:00 door Teun Beijers



