我有一个表来跟踪游戏数据,以下是该表的示例:
id | player_name | date | score | kills
1 | test1 | 2013-01-01 00:00:00 | 10000 | 200
2 | test1 | 2013-01-01 00:01:00 | 12000 | 300
我有一个玩家排行榜,它对在特定时间段内获得最多得分/击杀等的人进行排名。目前我只得到了它,以便它对过去 24 小时内的玩家进行排名。我这样做的方法是选择指定时间段内的第一条和最后一条记录,然后减去它们以获得差异。
这是我当前的查询:
SELECT date, score FROM datapoints WHERE player_name = :player AND date = (SELECT MIN(date) FROM datapoints WHERE player_name = :player AND date > DATE_SUB(CURDATE(), INTERVAL 24 HOUR))
UNION ALL
SELECT date, score FROM datapoints WHERE player_name = :player AND date = (SELECT MAX(date) FROM datapoints WHERE player_name = :player AND date > DATE_SUB(CURDATE(), INTERVAL 24 HOUR))
减去后,我使用 PHP arsort()
函数对它们进行排序,然后将它们显示在页面上。
但是,我想添加另一个功能。我希望能够看到哪一天是用户得分/击杀数最好的一天。
我一直在考虑如何做到这一点,其中之一是使用上面的查询,但每天都有一个循环并取出最好的一天,但这可能不是很有效,我想知道,如果有更好的方法吗?
最佳答案
以下是获取任意给定日历日发生的分数变化和击杀数的方法:
select date(date) as thedate, max(score) - min(score) as DayScore,
max(kills) - min(kills) as DayKills
from datapoints dp
where player_name = :player
group by date(date);
例如,要获取分数的最高日期,您可以添加 order by
和 limit
子句,如下所示:
order by DayScore desc
limit 1;
关于php - 高分 - 用户的最佳时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905420/