具有玩家等级的快速mySQL排行榜(及周边玩家)

Ash*_*man 6 mysql

我正在制作一个简单的游戏,具有排行榜功能(mySQL/PHP).

在游戏结束时:

  1. 至服务器:玩家的分数
  2. 从服务器:服务器,玩家的排名在排名中直接排在他们之上和之下的5名玩家

我并不特别相信该服务器会处理预期的玩家流量 - 所以我想这样做.

以下哪种方法可行(并且速度最快)?

  • 改变表?(经常修改表格时速度慢吗?如何获得排名?)
  • 带ORDER BY的简单行(等级)计数器?
  • 使用WHERE子句的简单行(排名)计数器更快?

或者我错过了更好的解决方案?

Joh*_*ica 5

ALTER TABLE
ALTER TABLE是用来更改的结构。
当您犯了一个错误或对如何做事情改变了主意时,可以使用它。
如果您不知道它有什么用,请不要使用它。

INDEX
INDEX是使排序更快总是你在一个经常使用的指标分配给列WHERE条款或在ORDER BY条款。
您可以排序并选择没有索引的很好,只是速度较慢。

排名
如果您想将排名最高的球员列在首位,那么:

SELECT field1, field2, ... FROM players ORDER BY score DESC LIMIT 25  
Run Code Online (Sandbox Code Playgroud)

将为您提供排名前25位的高分玩家,首先得分最高 从高到低的顺序相反DESC

幻想排名

SELECT @rank:= 0; -- <<-- First run this query!

SELECT @rank:= @rank + 1 as rank, s.* FROM (
  SELECT field1, field2, ... FROM players ORDER BY score DESC LIMIT 25  
) s; --<<-- than this one.
Run Code Online (Sandbox Code Playgroud)

哦,继续阅读有关SQL的基本知识。
Google forSQL tutorial

祝好运。

  • @arnep,请谨慎进行查询内部的@rank初始化,MySQL不保证查询部分的执行顺序。如果执行顺序错误,则您的排名在第一次运行时会像`(null,null,...,0)`,而在第二次运行中会像是((0,1,2,3,...,0)`运行,甚至怪异的命令:-)。 (3认同)