bur*_*ger 5 mysql sorting ranking
我有一个包含许多行的MySQL表.该表有一个受欢迎的列.如果我按人气排序,我可以得到每个项目的排名.是否可以在不对整个表进行排序的情况下检索特定项目的等级?我不这么认为.那是对的吗?
另一种方法是创建一个用于存储排名的新列,对整个表进行排序,然后遍历所有行并更新排名.这是非常低效的.有没有办法在单个查询中执行此操作?
没有先排序表或存储排名,就无法计算某些东西的顺序(你称之为排名).
如果你的表被正确编入索引(流行度指数),数据库对此进行排序是微不足道的,这样你就可以得到你的排名.我建议如下:
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Run Code Online (Sandbox Code Playgroud)
要获取具有特定"id"的项目,您只需使用子查询,如下所示:
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;
Run Code Online (Sandbox Code Playgroud)