PHP游戏的排行榜/高分榜

时间:2016-06-20 14:19:19

标签: php sql database leaderboard

我在PHP排行榜上遇到问题,我需要为正在使用我的程序的人创建排行榜。

该程序正在向数据库发送分数,然后在单独的页面上显示所选玩家的所有游戏分数。 24小时后正在从数据库中清除分数。我需要的是在用于发送游戏分数的相同php中使用另一个数据库(我已经拥有)。但相反,新功能应该将分数发送到其他数据库(一个人不会清理分数)。

只有当玩家不存在时,该函数才会在数据库中添加新行。如果玩家存在且分数被发送,我希望将分数添加到同一列并计算它们(总和)。

例如:一名玩家有10人死亡,10人死亡。他打了新比赛,他的得分是5次杀死,5次死亡。数据库会自动将该分数与之前的分数进行自动求和,这会导致他的DB列从10次杀死和10次死亡变为15次死亡和15次死亡(数学/总和/添加或w / e,你称之为5次杀死和5次死亡) 。那么我有办法做到这一点吗?排行榜的目的不是显示用户的最高分,而是显示他的总杀人次数和总死亡次数。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

而不是做这个伪造的:

情景1:

// user exists
// determine current score
// update user, current score + new game score

情景2:

// user does not exist
// insert user with new game score

在这里,您尝试使用最新的总计更新一行。虽然这绝对可以做到,但只要您对团队合作,并且实际上跟踪所有游戏,而不仅仅是统计数据的总和,它就可以更简单地完成。您可以 获取 各个部分的总计统计数据。

GameRecord:

playId int primary key identity
userId int
deaths int
kills int

用户之前是否有“GameRecord”并不重要。

-- Game 1
insert into GameRecord (userId, deaths, kills)
values (42, 0, 5)

-- Game 2
insert into GameRecord (userId, deaths, kills)
values (42, 1, 5)

-- Game 3
insert into GameRecord (userId, deaths, kills)
values (1, 0, 1)

有了这些数据,你只需保留每场比赛的记录,而不是保持“滚动总数”。然后你可以做以下事情:

select    
          userId,
          count(1) as totalGamesPlayed,
          sum(deaths) as totalDeaths,
          sum(kills) as totalKills
from      GameRecord
group by  userId

返回:

userId     totalGamesPlayed     totalDeaths     totalKills
42         2                    1               10
1          1                    0               1