Mysql 创建等待列表系统并对用户重新排序

Mysql 创建等待列表系统并对用户重新排序,mysql,nosql,ranking,Mysql,Nosql,Ranking,这就是我的问题,我正在为一个应用程序开发一个等待列表系统。用户会在我们发布时注册以获得通知,并提供推荐链接以帮助“提升”他们在等待列表中的位置 我遇到的问题是如何在MySQL或NoSQL数据库中对它们进行排序。我遇到的问题是,如果我的数据库如下所示: User | Ranking | Invited ------------------------- user1 | 1 | 0 user2 | 2 | 0 user3 | 3 | 0 use

这就是我的问题,我正在为一个应用程序开发一个等待列表系统。用户会在我们发布时注册以获得通知,并提供推荐链接以帮助“提升”他们在等待列表中的位置

我遇到的问题是如何在MySQL或NoSQL数据库中对它们进行排序。我遇到的问题是,如果我的数据库如下所示:

User  | Ranking | Invited
-------------------------
user1 |    1    |    0
user2 |    2    |    0
user3 |    3    |    0
user4 |    4    |    0
user5 |    5    |    0
user6 |    6    |    0
user7 |    7    |    0
user8 |    8    |    1
User  | Ranking | Invited
-------------------------
user1 |    2    |    0
user2 |    3    |    0
user3 |    4    |    0
user4 |    5    |    0
user5 |    6    |    0
user6 |    7    |    0
user7 |    8    |    0
user8 |    1    |    1
现在,假设user8现在邀请1个朋友。它们会上升到顶部,但是我该如何对这些数据进行排序呢?可以将整个表重新排序为如下所示:

User  | Ranking | Invited
-------------------------
user1 |    1    |    0
user2 |    2    |    0
user3 |    3    |    0
user4 |    4    |    0
user5 |    5    |    0
user6 |    6    |    0
user7 |    7    |    0
user8 |    8    |    1
User  | Ranking | Invited
-------------------------
user1 |    2    |    0
user2 |    3    |    0
user3 |    4    |    0
user4 |    5    |    0
user5 |    6    |    0
user6 |    7    |    0
user7 |    8    |    0
user8 |    1    |    1

但如果记录超过几百条,就不太实用了。也许我没有正确看待这个问题?必须有一个更简单的解决方案吗?感谢您的指点和帮助!谢谢。

如果您希望排名以邀请人数最多的人为基础,如果邀请人数相同,则以他们的原始排名为基础,请在阅读表格时按此方式排序:

select user from waitlisttable order by invited desc, ranking;
如果您在一些较大的查询中需要该顺序,您可以为此创建一个视图,但实际上应该避免更新所有现有记录的排名

如果要获取所有用户的“排名”,请参阅

如果您确实需要能够查找单个用户的排名,那么您可能需要更新所有的行;根据您的负载有多重,您可以通过某个作业每X分钟执行一次,或者每次通过触发器更新一行时执行一次。执行前者的一个简单示例是:

set @rank:=0;
update waitlisttable set ranking=(@rank:=@rank+1) order by invitations desc, initial_ranking;

谢谢你的建议!现在,我将如何向最终用户显示此排名?例如,如果user8再次想要查看他们的排名,这将如何向他们显示?我想你应该避免这样做?否则,当其他人发出邀请时,他们的排名下降,他们会感到困惑。但如果你真的这么做了,那么我认为你会在每次发生变化时更新所有排名。我将在我的答案中添加一些内容,以显示我如何需要第二个选项。非常适合我,谢谢!:)