(Opgelost) De naam van de snelste per leeftijd categorie
Sara Z
02/10/2012 13:17:37Beste,
Ik heb een tabel met de volgende gegevens:
Speler, Leeftijd, Score (Elke speler heeft alleen maar een score)
Nu wil ik als resultaat de snelste speler per leeftijd. Bij voorbeeld:
6 jaar - 9,12 - Pim (Pim is de snelste van alle andere 6 jarige deelnemers)
7 jaar - 8,05 - John
8 jaar - 7,30 - Sam
Tot nu toe heb ik de volgende query gebruikt:
Ik krijg wel het resultaat gegroepeerd op Leeftijd, maar natuurlijk een willekeurige deelnemer van deze leeftijd categorie.
Kan iemand mij helpen svp?
Alvast bedankt,
sz
Ik heb een tabel met de volgende gegevens:
Speler, Leeftijd, Score (Elke speler heeft alleen maar een score)
Nu wil ik als resultaat de snelste speler per leeftijd. Bij voorbeeld:
6 jaar - 9,12 - Pim (Pim is de snelste van alle andere 6 jarige deelnemers)
7 jaar - 8,05 - John
8 jaar - 7,30 - Sam
Tot nu toe heb ik de volgende query gebruikt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "SELECT
test_player,
test_snelheid_40m_tijd_1,
test_birthday,
DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(birthday)), '%Y') + 0 AS age,
FROM (".TEST_TABLE.")
GROUP BY age
";
?>
$sql = "SELECT
test_player,
test_snelheid_40m_tijd_1,
test_birthday,
DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(birthday)), '%Y') + 0 AS age,
FROM (".TEST_TABLE.")
GROUP BY age
";
?>
Ik krijg wel het resultaat gegroepeerd op Leeftijd, maar natuurlijk een willekeurige deelnemer van deze leeftijd categorie.
Kan iemand mij helpen svp?
Alvast bedankt,
sz
Gewijzigd op 02/10/2012 15:01:59 door Sara Z
PHP hulp
22/11/2024 06:46:31Flip --
02/10/2012 13:27:54http://stackoverflow.com/questions/1305056/selecting-all-corresponding-fields-using-max-and-group-by
Kris Peeters
02/10/2012 14:48:36Dat moet lukken met een subquery.
Zoiets, denk ik
t1 vormt een (tijdelijke) tabel met alle leden, gerangschikt volgens score/snelheid(aflopend).
Als je dan de hoofdquery gaat groeperen per leeftijd, komt mySQL eerst de record tegen van de speler(/loper) met de hoogste score (/beste tijd) en worden dus diens gegevens gebruikt voor het resulterende record van zijn leeftijd.
Zoiets, denk ik
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *
FROM (
SELECT
test_player,
test_snelheid_40m_tijd_1,
test_birthday,
DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(birthday)), '%Y') + 0 AS age
FROM
test_table
ORDER BY test_snelheid_40m_tijd_1 DESC
) as t1
GROUP BY t1.age
ORDER BY t1.age DESC
FROM (
SELECT
test_player,
test_snelheid_40m_tijd_1,
test_birthday,
DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(birthday)), '%Y') + 0 AS age
FROM
test_table
ORDER BY test_snelheid_40m_tijd_1 DESC
) as t1
GROUP BY t1.age
ORDER BY t1.age DESC
t1 vormt een (tijdelijke) tabel met alle leden, gerangschikt volgens score/snelheid(aflopend).
Als je dan de hoofdquery gaat groeperen per leeftijd, komt mySQL eerst de record tegen van de speler(/loper) met de hoogste score (/beste tijd) en worden dus diens gegevens gebruikt voor het resulterende record van zijn leeftijd.
Gewijzigd op 02/10/2012 14:51:35 door Kris Peeters