我经营着一个专门跟踪在线游戏玩家统计数据的网站。该网站的功能之一是为他们构建图表,以跟踪他们在过去 2000 场比赛中的进度。
我目前正在做的是使用此查询来获取他的所有记录,然后使用 PHP 以大约 100 场战斗的增量选择记录,直到我拥有构建图表所需的 20 条记录:
SELECT DISTINCT battles, victories, survived, destroyed, detected,
hitratio, damage, capture, defense, avg_exp, efficiency
FROM account_stats
WHERE account_id = XXXXXXX
AND battles >= ZZZZZZZ;
ZZZZZZZ 是他当前的战斗次数减去 2000。我使用 distinct 是因为数据库可以保留重复值(这是因为某些历史功能)。
我必须使用近似值的原因是因为我从游戏的 API 中获取数据,所以在一次检查中,他可能玩过多个游戏。这意味着在数据库中,“战斗”计数将具有不同的增量。
使用上面的查询只会杀死数据库服务器,因为它会在磁盘上创建大量临时表,从而使整个网站陷入瘫痪。
所以我的问题是:有什么方法可以在数据库中准确地选择 20 行,从前一次选择最接近 100 场战斗的行,而不使用 DISTINCT / GROUP BY / 任何在磁盘上创建临时表的东西?
提前致谢!