Mysql 创建等待列表系统并对用户重新排序
这就是我的问题,我正在为一个应用程序开发一个等待列表系统。用户会在我们发布时注册以获得通知,并提供推荐链接以帮助“提升”他们在等待列表中的位置 我遇到的问题是如何在MySQL或NoSQL数据库中对它们进行排序。我遇到的问题是,如果我的数据库如下所示:Mysql 创建等待列表系统并对用户重新排序,mysql,nosql,ranking,Mysql,Nosql,Ranking,这就是我的问题,我正在为一个应用程序开发一个等待列表系统。用户会在我们发布时注册以获得通知,并提供推荐链接以帮助“提升”他们在等待列表中的位置 我遇到的问题是如何在MySQL或NoSQL数据库中对它们进行排序。我遇到的问题是,如果我的数据库如下所示: User | Ranking | Invited ------------------------- user1 | 1 | 0 user2 | 2 | 0 user3 | 3 | 0 use
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再次想要查看他们的排名,这将如何向他们显示?我想你应该避免这样做?否则,当其他人发出邀请时,他们的排名下降,他们会感到困惑。但如果你真的这么做了,那么我认为你会在每次发生变化时更新所有排名。我将在我的答案中添加一些内容,以显示我如何需要第二个选项。非常适合我,谢谢!:)