这是我的问题,我正在为一个应用程序创建等待列表系统。当我们启动时,用户将注册并得到通知,并提供推荐链接以帮助“提升”他们在等候列表中的位置。
我遇到的问题是如何在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}}
但是如果记录超过几百个,那不是很实际。也许我不是以正确的方式看待这个问题?必须有一个更简单的解决方案?任何指针或帮助表示赞赏!谢谢。
答案 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;