如果表字段是:id, author_id, version, rank, …… 假设表数据如下
30,1,100,200……
29,2,100,190……
28,3,100,180……
27,4,100,170……
26,5,100,160……
25,6,100,150……
24,7,100,140……
23,1,100,130……
22,3,100,120……
需求:取最新排名的前五个author_id
正确的结果:1,2,3,4,5
首先想到的查询语句如下:
select distinct author_id from article order by version desc, rank desc limit 5;
大部分情况是正确的。但是对于上面的测试数据,mysql的输出结果为:2,4,5,6,7
很奇怪不知道结果为啥如此。
改查前10条
select distinct author_id from article order by version desc, rank desc limit 10;
mysql的输出结果为:2,4,5,6,7,1,3,……
根据结果分析,distinct与order by结合后的排序,author_id出现在了id最小的位置上了。
然后我尝试了以下语句,输出结果就是正确的。
select distinct author_id from ( select author_id from article order by rank desc ) tb limit 5
问题解决。