创建一个等待列表系统并重新排列用户等级

时间:2018-12-31 21:53:28

标签: mysql nosql ranking

这是我的问题,我正在为一个应用程序创建等待列表系统。当我们启动时,用户将注册并得到通知,并提供推荐链接以帮助“提升”他们在等候列表中的位置。

我遇到的问题是如何在MySQL或NoSQL数据库中对它们进行排名。如果我的数据库看起来像这样,我遇到的问题是这样的:

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个朋友。他们被推上了榜首,但是我该如何对这些数据进行排序呢?可以对整个表重新排序以使其看起来像这样:

{{1}}

但是如果记录超过几百个,那不是很实际。也许我不是以正确的方式看待这个问题?必须有一个更简单的解决方案?任何指针或帮助表示赞赏!谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望排名基于邀请人数最多的人,并且邀请的数量与原始邀请的人数相同,请在阅读表格时以这种方式排序:

select user from waitlisttable order by invited desc, ranking;

如果您需要在更大的查询中使用该顺序,则可以为此创建一个视图,但是实际上应该避免更新所有现有记录的排名。

如果要获得所有用户的“排名”,请参见How to show sequential number in MySQL query result

如果确实需要查找单个用户的等级,则可能确实需要更新所有行;根据您的工作量,您可以每X分钟执行一次作业,也可以每次通过触发器更新一行。一个简单的例子是:

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