多くのプレイヤーが多くのゲームを何度もプレイできるマルチゲームトーナメントのスコアボードを構築しています。私は各ゲームのランクに基づいて、実際のスコアではなく、ゲームごとにプレーヤーにポイントを割り当てたいと思う。複数のゲームのプレイヤーにランクごとにランクを割り当てる
ドンキーコング
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
トーナメント順位ので
Player1 - 1,999 Points
Player2 - 1,998 Points
Player3 - 1,997 Points
これまで私は、ランク付けしているとの点の計算がうまく働いて...
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;
しかし、私は、ランクごとのゲームでポイントを割り当てることができるようにする必要がありますし、その私ができる各プレイヤーのためのポイントの総計を持っていますリストに表示されます。
まず別々のデータを指します。二番目に与えられたポイントは、常に1位から1位まで同じになるでしょうか?そのビジネスロジックをコードに移しているのですか? – JackTheKnife
はいポイントは常にランクごとに同じです –
OK - これは冗長なので、DBからそのデータを移動します(ゲームごとのランクも同じです)。次に、各ゲームの配列(ハッシュマップ)を、キーがランク番号で値が配列になるスコア列(「ランク1」などの最高得点を与える)に並べ替え、「desc」を付けたクエリから作成しますプレイヤーIDとスコアのリスト)。そのような配列をループすると、プレイヤーIDを持つ一時変数(または配列)を作成し、それらに賞ポイントを割り当てることができます。最後に、各プレイヤーIDの合計ポイントで終了する必要があります。 – JackTheKnife