0

我有一个记录游戏数据的表格,这是表格的一个示例:

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))

减去后,我使用 PHParsort()函数对它们进行排序,然后将它们显示在页面上。

但是,我想添加另一个功能。我希望能够看到哪一天是用户得分/击杀的最佳日子。

我一直在想我怎么可能做到这一点,一个是使用上面的查询,但每天都有一个循环并取出最好的一天,但这可能不是很有效,我想知道,如果有一个这样做的更好方法?

4

1 回答 1

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 byandlimit子句:

order by DayScore desc
limit 1;
于 2013-09-19T21:57:54.483 回答