【问题标题】:Optimise database high score ranking in arcade game优化街机游戏数据库高分排名
【发布时间】:2019-11-25 00:47:17
【问题描述】:

我正在尝试将在线高分表添加到我的基本 iOS 应用程序中。我不希望它与 GameCenter 相关联,所以我想将高分存储在我自己的数据库中。当用户第一次打开应用程序时,系统会提示他们输入一个昵称,用于保存高分。理论上,高分数据库应该是这样的:

userid  name      highscore
1       james123  201       
2       xXsamXx   98         

userid 是自动递增的,name 是他们选择的昵称,highscore 是他们获得的最高分数,每次他们打破所说的分数时都会被覆盖。

要返回用户在游戏中的全球排名,我可以通过高分ORDER 数据库并返回他们的位置。

这带来了两个我想要解决的问题 - 我不希望每当有人获得高分时对整个数据库进行重新排序,而且我也不知道如何返回相同的排名具有相同分数的两个用户(作为一列,即用户,最终将排在另一列之前)。我该如何解决这两个问题?

谢谢!

【问题讨论】:

标签: php mysql database


【解决方案1】:

不用担心“重新排序”您的表格 - ORDER BY 只会重新排序您的查询的结果,而不是表格本身。

如果您还想返回排名,则需要在表中添加一个rank 字段,因为无论如何您都必须使用两个单独的行来获得两个相同的分数。您可以在更新 highscore 字段后立即填充此字段。

【讨论】:

  • 或者,如果两个分数相等并且没有其他有意义的标准,那么您可以按任意方式对这些结果进行排序,例如名称的字母顺序。这是通过向 ORDER by 子句添加第二个字段名称来完成的。
  • 我不想创建排名列的原因是因为如果另一个用户击败他们,用户的排名会改变。如何在每次达到新的高分时返回用户的当前排名而不对每个记录的分数进行排序?
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 2011-08-15
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多