我有一个包含很多行的 MySQL 表。该表有一个流行列。如果我按受欢迎程度排序,我可以获得每个项目的排名。是否可以在不对整个表进行排序的情况下检索特定项目的排名?我不这么认为。对吗?
另一种方法是创建一个新列来存储排名,对整个表进行排序,然后遍历所有行并更新排名。那是极其低效的。有没有办法在单个查询中执行此操作?
最佳答案
如果不先对表格进行排序或存储排名,就无法计算某事物的顺序(所谓的排名)。
但是,如果您的表已正确编入索引(流行度索引),数据库对其进行排序就很容易,因此您可以获得排名。我建议如下:
全选,包括排名
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
要获取具有特定“id”的项目,您可以简单地使用如下子查询:
选择一个,包括排名
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;
关于mysql - mysql表中的排名条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195257/