我正在建立一个多游戏锦标赛记分牌,许多玩家可以多次玩很多游戏。我想根据每位玩家的排名为他们分配得分,而不是根据他们的实际得分。

例如

大金刚

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/

10-13 08:53