Ich baue eine Multispiel-Anzeigetafel, in der viele Spieler viele Spiele spielen können. Ich möchte den Spielern pro Spiel Punkte zuweisen, basierend auf ihrem Rang für jedes Spiel, nicht ihre tatsächliche Punktzahl.Weisen Sie Spielern von mehreren Spielen Punkte nach Rang zu.
z.B.
Donkey Kong
Rank | Player | Score | Points Awarded
1 | Player2 | 34,000 | 1,000
2 | Player1 | 32,000 | 999
3 | Player3 | 29,000 | 998
Robotron
Rank | Player | Score | Points Awarded
1 | Player1 | 39,000 | 1,000
2 | Player3 | 32,000 | 999
3 | Player2 | 21,000 | 998
Turnier-Platzierung
Player1 - 1,999 Points
Player2 - 1,998 Points
Player3 - 1,997 Points
So Bis jetzt habe ich Ranking und Punkte Berechnungen funktioniert ganz gut ...
SELECT
`id`,
`userID`,
`gameID`,
`gamescore`,
`rank`,
1001.0 - (rank) AS points
FROM (
SELECT
`id`,
`userID`,
`gameID`,
`gamescore`,
@curr_rank := IF(@prev_rank = id, @curr_rank, @curr_rank + 1) AS rank,
@prev_rank := id
FROM
`submit_score`,
(SELECT @curr_rank := 0) y,
(SELECT @prev_rank := NULL) z
WHERE `submit_score`.`tournID` = 2
ORDER BY `gamescore` DESC
) ranked_game;
Aber ich muss in der Lage sein, die Punkte von Rang-per-Spiel zuweisen und haben dann eine Gesamtsumme der Punkte für jeden Spieler, dass ich dann in einer Liste anzeigen.
erste getrennte Daten von Beziehungen. Zweitens - Wurden die Punkte immer vom ersten bis zum niedrigsten Platz vergeben? Ist das so, verschieben Sie diese Geschäftslogik in den Code. – JackTheKnife
ja die Punkte sind immer die gleichen pro Rang –
OK - also weg diese Daten aus der DB wie dies redundant ist (sowie Rang pro Spiel). Dann erstellen Sie ein Array (Hash-Map) für jedes Spiel aus einer Abfrage mit der Sortierung 'desc' in der Score-Spalte (das wird Ihnen die höchste Punktzahl als Rang 1 usw. geben), wobei der Schlüssel eine Rangnummer und die Werte ein Array sind (Liste) der Spieler-ID und des Ergebnisses. Durch diese Art von Array können Sie temporäre Variablen (oder ein Array) mit Player-IDs erstellen und ihnen Punkte zuweisen. Am Ende solltest du mit Gesamtpunkten für jede Spieler-ID enden. – JackTheKnife