首页 > 解决方案 > 如何根据分数计算排名?

问题描述

有一个平台,我们根据用户的积分对用户进行排名。假设有大约 10,000 个条目。数据库如下所示。

ID 用户名 积分
0 建筑师 0 4
1 建筑师1 15 1
2 建筑师2 10 2
3 建筑师3 5 3

每当有人执行某项操作时,他们的分数就会增加或减少,基于此,我还需要更新数据库中的排名。但问题是,每次有人采取行动时,一次又一次地更新它是一个非常缓慢的过程。而且在个人资料上显示排名的同时计算排名也不是一个好方法。

这种问题的理想解决方案应该是什么?

标签: databasedata-structures

解决方案


为了提高效率,你应该只改变排名,而不是每次都重新计算整个数据。

由于您没有指定编程语言,这里是一个示例伪代码:

-- input variables: CurrID, PointChange
CurrRank = Rank[CurrID]
Points[CurrID] = Points[CurrID] + PointChange
CurrPoints = Points[CurrID]
NewRank = SELECT count(Id) From YourTable where Points >= CurrPoints
if NewRank > CurrRank Then
  update YourTable Rank = Rank - 1 where Rank > CurrRank And Rank <= NewRank
else
  update YourTable Rank = Rank + 1 where Rank <= CurrRank And Rank > NewRank
end if
Rank[CurrID] = newRank

推荐阅读