编辑:由 Ian & Mark 解决...
游戏的高分需要从 MySQL 数据库中获取(使用 php)。我使用的查询适用于总是随时间增加的统计数据。但是,该查询不适用于可以及时上升或下降的统计数据。
一些细节:
玩家的统计数据存储在stats
表格中。每个玩家多行(所有更新),一个 auto_increment 列是主键。
CREATE TABLE IF NOT EXISTS `stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stamp` bigint(20) NOT NULL,
`username` varchar(255) NOT NULL,
`kill` int(11) NOT NULL,
`death` int(11) NOT NULL,
`kdr` decimal(6,3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=956 ;
一些样本数据:
1, 1365175892, user1, 1089, 191, 5.702
2, 1365175892, user2, 1805, 547, 6.709
3, 1365175892, user3, 104397, 2272, 45.949
4, 1365175892, user1, 1163, 200, 5.815
5, 1365175892, user2, 1090, 204, 5.343
Kills & Deaths 随时间递增,因此创建前 10 名很简单。
问题
对于 Kill to Death Ratio (KDR),该值可以随时间上升或下降。示例:更新 5 中的用户 2 的 KDR 低于更新 2 中的 KDR,但我的高分列表仍然显示更新 2 的最高 KDR,而我实际上需要更新 5 中的较低 KDR。
所以在这里,对于前 10 名,我不需要最高值(即自动为每个玩家存储的最后一个值),而是最新值(不一定是最高值)。我无法让它工作......
我尝试的查询之一是适用于仅增加统计信息的查询:
SELECT s.*
FROM stats AS s
INNER JOIN
(
SELECT username, MAX(kdr) AS kdr
FROM stats
GROUP BY username
) AS groupedstats
ON s.username = groupedstats.username
AND s.kdr = groupedstats.kdr
ORDER BY kdr DESC
LIMIT 10
谁能帮助我如何获得正确的 kdr 高分列表?我迷路了...
谢谢