我在PHP排行榜上遇到问题,我需要为正在使用我的程序的人创建排行榜。
该程序正在向数据库发送分数,然后在单独的页面上显示所选玩家的所有游戏分数。 24小时后正在从数据库中清除分数。我需要的是在用于发送游戏分数的相同php中使用另一个数据库(我已经拥有)。但相反,新功能应该将分数发送到其他数据库(一个人不会清理分数)。
只有当玩家不存在时,该函数才会在数据库中添加新行。如果玩家存在且分数被发送,我希望将分数添加到同一列并计算它们(总和)。
例如:一名玩家有10人死亡,10人死亡。他打了新比赛,他的得分是5次杀死,5次死亡。数据库会自动将该分数与之前的分数进行自动求和,这会导致他的DB列从10次杀死和10次死亡变为15次死亡和15次死亡(数学/总和/添加或w / e,你称之为5次杀死和5次死亡) 。那么我有办法做到这一点吗?排行榜的目的不是显示用户的最高分,而是显示他的总杀人次数和总死亡次数。
有什么建议吗?
答案 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