gpt4 book ai didi

sql - 排行榜的高效 SQL 查询/架构

转载 作者:行者123 更新时间:2023-12-03 04:57:35 25 4
gpt4 key购买 nike

我写了一个愚蠢的小游戏,想要有某种排行榜网站。

通常排行榜仅限于 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

但是从数据库性能的角度来看,运行这个查询然后线性搜索列表对我来说似乎有点荒谬。即便如此,我还是很难想象一个查询/架构可以使其成为快速操作。

有什么想法吗?

(我更愿意保持数据库模式和查询通用(不依赖于供应商)。但是,如果一个供应商使这变得容易,我很乐意使用 MS SQL 或 MySQL。

最佳答案

怎么样:

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

您还需要在分数列上建立索引。

使用 score > (...) 执行 count()+1 将为您提供准确的排名,即使多个玩家得分相同;使用 score >= (...) 执行 count() 不会。

关于sql - 排行榜的高效 SQL 查询/架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575785/

25 4 0
文章推荐: sql - 无法将 csv 导入 SQLite 中的表 : no such table error
文章推荐: javascript - 使用 SoundCloud API 检索轨道的 "Artist"字段
文章推荐: javascript - 动态(以编程方式)向 jQuery 中的 dropkick