1

我经营着一个专门跟踪在线游戏玩家统计数据的网站。该网站的功能之一是为他们构建图表,以跟踪他们在过去 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 / 任何在磁盘上创建临时表的东西?

提前致谢!

4

0 回答 0