在mysql表中排名条目

bur*_*ger 5 mysql sorting ranking

我有一个包含许多行的MySQL表.该表有一个受欢迎的列.如果我按人气排序,我可以得到每个项目的排名.是否可以在不对整个表进行排序的情况下检索特定项目的等级?我不这么认为.那是对的吗?

另一种方法是创建一个用于存储排名的新列,对整个表进行排序,然后遍历所有行并更新排名.这是非常低效的.有没有办法在单个查询中执行此操作?

hob*_*ave 9

没有先排序表或存储排名,就无法计算某些东西的顺序(你称之为排名).

如果你的表被正确编入索引(流行度指数),数据库对此进行排序是微不足道的,这样你就可以得到你的排名.我建议如下:

选择所有,包括排名

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)