我有一个跟踪游戏数据的表,这是表格的一个例子:
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()
函数对它们进行排序,然后在页面上显示它们。
但是,我想添加另一个功能。我希望能够看到用户哪一天是用户得分/杀人的最佳日子。
我一直在想我怎么可能做到这一点,一个人正在使用上面的查询,但每天都有一个循环,并取出最好的一天,但这可能不是很有效,我想知道,如果有更好的方法吗?
答案 0 :(得分:1)
以下是您如何获得在任何特定日历日发生的分数变化和杀戮:
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;