我正在建立一个多游戏锦标赛记分牌,许多玩家可以多次玩很多游戏。我想根据每位玩家的排名为他们分配得分,而不是根据他们的实际得分。
例如
大金刚
Rank | Player | Score | Points Awarded
1 | Player2 | 34,000 | 1,000
2 | Player1 | 32,000 | 999
3 | Player3 | 29,000 | 998
机械手
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;
但是我需要能够按照每场比赛的排名来分配积分,然后为每个球员拥有一个总计的积分,然后我可以在列表中显示这些积分。
最佳答案
您的数据库应该看起来像
玩家们
ID | Player Nickname
1 | Player1
2 | Player2
3 | Player3
大金刚
PlayerID | Score
Player2ID | 34,000
Player1ID | 32,000
Player3ID | 29,000
机械手
PlayerID | Score
Player1ID | 39,000
Player3ID | 32,000
Player2ID | 21,000
DB仅应用于存储数据。等级和奖励积分应移至代码中,因为它们是多余的部分。
然后使用
desc
对得分列进行排序来查询每个表。这将创建排名最高的得分者为#1等的排名表。使用Key-> Values为每个游戏检索数组中的数据存储,其中Key将为排名#(1+增量),而Values可以是具有已存储玩家数据的其他数组(加入后)和分数或字符串,例如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
关于php - 按等级为多个游戏的玩家分配分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43478977/