1

我正在开发一个 iPhone 应用程序,它需要一个存储在远程服务器上的高分系统。

如果您在列表中排在第 500 位,您应该会在屏幕上看到第 495 到 505 位。

编辑(忘了提及):您可以在多个列表中,例如列表“伦敦”、“超级英雄团队”和“小说迷”。如果有数百万用户和数千个组,我如何最有效地在我的所有列表中选择我的展示位置周围的 10 个位置?

我想到了以下几点:

  • 每个列表选择一个:select * from scores where list = '$list' order by points desc limit $myplace-5, 10
  • 一次选择所有列表:select * from scores where list in ($lists) order by list, points desc然后使用 PHP 选择正确的位置

随着所有新的数据库类型(NoSQL 等)的出现,是否有适合此问题的数据库类型?

例如,从一开始就将您的分数插入正确的位置,这样每个select人都不必对数据进行排序?

还是一种快速选择您所在位置周围 10 个位置的方法?(如果我刚刚选择了正确的行,则实际的排序可能发生在客户端)

4

2 回答 2

1

最好的解决方案是通过 SQL 查询获取您需要的准确数据,而不是通过 PHP 进行。使用 NoSQL 数据库可能不适合您的问题。MySQL 将毫无问题地处理这么多的数据。

于 2013-02-15T08:01:21.477 回答
0

您可以通过以下查询直接获得所需的订单

//user id
set @ID = 3; 

// get the score of the user
set @Score = (select score
              from users
              where ID = @ID);

//get the user who are less than you, and greather than you nad union them
select ID, Score
from (select U.ID, U.Score
      from users as U
      where U.ID <> @ID and
            U.Score < @Score
      order by U.Score desc limit 5) as P
union all
select U.ID, U.Score
from users U
where U.ID = @ID
union all
select *
from (select U.ID, U.Score
      from users as U
      where U.ID <> @ID and
            U.Score > @Score
      order by U.Score limit 5) as A
order by Score;   

来源:https ://stackoverflow.com/a/5796636/598424

于 2013-02-15T08:07:02.640 回答