编辑:由Ian&标记...
游戏的高分需要从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
杀戮与杀戮死亡人数会随着时间的推移而增加,因此创建前10名很容易。
问题
对于杀死率(KDR),该值可以及时上升或下降。 示例:更新5中的user2在更新2中具有较低的KDR,但仍然我的高分列表显示更新2的最高KDR,而我实际上需要来自更新5的较低KDR。
所以在这里,对于前10名,我不需要最高值(这将是自动为每个玩家存储的最后一个值),而是LATEST值(不一定是最高值)。 我无法让它发挥作用......
我尝试的其中一个查询是适用于仅增加统计数据的查询:
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高分榜?我迷路了...
由于
答案 0 :(得分:1)
假设你希望kdr的前10名为每个用户的最新记录,请尝试:
SELECT s.*
FROM stats AS s
INNER JOIN
(
SELECT username, MAX(`stamp`) AS `stamp`
FROM stats
GROUP BY username
) AS groupedstats
ON s.username = groupedstats.username
AND s.`stamp` = groupedstats.`stamp`
ORDER BY kdr DESC
LIMIT 10
答案 1 :(得分:1)
这样的东西?
select * from stats where id in (
select max(id) as maxid
from stats
group by username
)
order by kdr desc limit 10