ORDER BY score en dan één positie pakken
Ik heb een tabel waarin speler id's en scores in staan. Nu kan ik een mooi scorebord maken. (http://vannorde.com/pokerboards.php).
Ik heb een video poker spel gemaakt, en je score wordt opgeslagen in die tabel. Nu wil ik in-game laten zien op welke positie de speler momenteel staat. Ik kan nu wel een query uitvoeren om ALLE records uit de tabel te halen, en dan zo te kijken op welke positie de speler staat. Maar ik vroeg mij af of dit mogelijk is binnen mysql zelf.
Zoiets als:
'SELECT * FROM account ORDER BY score DESC ->select daarna het speler id en geef terug op welke row die dan komt te staan'
Bij voorbaat dank,
Tim
Je kunt ook doen ORDER BY MAX(score) LIMIT 0,10 om de hoogste 10 scores op te halen en om vervolgens de namen van de spelers op te halen aan de hand van je speler id's.
@Ger; Ik heb alleen het id en de score in de tabel staan.
Ranking wordt on the fly aangemaakt in de query.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT ranking
FROM
(SELECT user_id, @rank + 1 AS ranking FROM credits, @rank:=0
ORDER BY value DESC) AS aka
WHERE user_id = $id"
FROM
(SELECT user_id, @rank + 1 AS ranking FROM credits, @rank:=0
ORDER BY value DESC) AS aka
WHERE user_id = $id"
Tabelnaam: credits
Veldnamen: user_id, value
Kom op, even je brein weer aan zetten. Je moet natuurlijk wel zorgen dat je je eigen tabelnaam en kolomnamen erin zet. DAT kan je toch wel bedenken....
Misschien meer uitleg bij wat er precies gebeurd met deze query, want ik kom er niet echt uit.
Sorry, foutje in de query het moet zijn:
SET @rank := 0 naar de dbserver sturen voordat je de querie uitvoert (betere methode)
Een alternatief zonder user vars
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 aka.ranking
FROM
(SELECT user_id, value,
FIND_IN_SET(
value
, (SELECT GROUP_CONCAT(
value
ORDER BY value DESC
)
FROM credits)
) AS ranking
FROM scores) AS aka
WHERE user_id = 5
FROM
(SELECT user_id, value,
FIND_IN_SET(
value
, (SELECT GROUP_CONCAT(
value
ORDER BY value DESC
)
FROM credits)
) AS ranking
FROM scores) AS aka
WHERE user_id = 5
Dit is beter want als nu twee users hetzelfde aantal credits hebben komen ze op de zelde ranking
Gewijzigd op 13/04/2012 17:52:10 door Ger van Steenderen
Hartstikke bedankt Ger!