当前位置:  开发笔记 > 后端 > 正文

领导板的高效SQL查询/架构

如何解决《领导板的高效SQL查询/架构》经验,为你挑选了1个好方法。

我写了一个愚蠢的小游戏,并希望有一些领导板网站.

通常排行榜只限于10或20名顶级球员,但我认为如果我能为每位球员记录他们的最高分,那将是很好的.然后,我总能展示他们的世界级别.

一个简单的架构,例如:

create table leaderboard (
    userid varchar(128) not null,
    score real not null,
    when datetime not null
);
create index on leaderboard(userid);

将存储我需要的最少量信息 - 每个用户输入1个最佳分数.

我的问题围绕如何有效地确定某人在排行榜上的位置.一般的想法是,我希望他们在列表返回的位置:

select userid from leaderboard order by score desc

但是从DB性能的角度来看,运行此查询然后线性搜索列表对我来说似乎有点荒谬.即使这样,我也很难想象一个能够快速操作的查询/模式.

有任何想法吗?

(我更希望保持数据库架构和查询通用(不依赖于供应商).但是,如果一个供应商使这很容易,我很乐意使用MS SQL或MySQL.



1> Henning..:

怎么样:

select count(*)+1 as rank from leaderboard  
where score > (select score from leaderboard where userid = ?)

您还需要分数列上的索引.

这样做count()+1score > (...)会给你即使当多个玩家具有相同的比分准确行列; 这样做count()score >= (...)不会.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有