我正在建立一个多游戏锦标赛记分牌,许多玩家可以多次玩很多游戏。我想根据每场比赛的得分,而不是他们的实际得分,为每场比赛的球员分配积分。
e.g。
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
锦标赛排名
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;
但是我需要能够按照每场比赛的等级分配分数,然后为每个玩家分配一个总积分,然后我可以在列表中显示。
答案 0 :(得分:0)
您的数据库应该看起来像
<强>球员强>
ID | Player Nickname
1 | Player1
2 | Player2
3 | Player3
Donkey Kong
PlayerID | Score
Player2ID | 34,000
Player1ID | 32,000
Player3ID | 29,000
<强> Robotron游戏强>
PlayerID | Score
Player1ID | 39,000
Player3ID | 32,000
Player2ID | 21,000
DB应仅用于存储数据。排名和奖励积分应该移动到代码中,因为它们是多余的部分。
然后使用desc
排序分数列查询每个表。这将创建排名表与最高得分者为#1等。使用Key-&gt;值检索每个游戏的数组中的数据存储,其中Key为排名#(1+增量),值可以是存储玩家数据的其他数组(加入后)和得分或字符串类似于PlayerX |分数#如果您需要任何分数数据,因为实际上您只需要玩家数据对每场比赛的分数进行排序。
之后,您需要循环播放器表并创建一个玩家阵列,您将存储从循环每个游戏阵列中检索到的锦标赛点数,并减少每个等级上的锦标赛积分并分配给合适的玩家。
希望有所帮助
PS。 对于现有数据,我将创建类似
的视图set @max_points=1000;
select Rank, Player,
@current_points := IF(Rank = 1, @max_points, @current_points-1) AS points
from DonkeyKong
每场比赛
然后做最后的观点来总结所有锦标赛分数
select dk.Player AS Player,(dk.Points + ro.Points) AS Total
from RO_view AS ro
left join DK_view AS dk
on dk.Player = ro.Player