ORDER BY 排序后,用 LIMIT 取前几条,发现返回的结果集的顺序与预期的不一样。
下面是我遇到的问题:
可以看到,带 LIMIT 与不带 LIMIT 的结果与我预期的不一样,而且“很不可思议”,真是百思不得其解。
于是,改成 order by status,id就成了。
原因:
对于 order by 查询,带或者不带 limit 可能返回行的顺序是不一样的。
如果 limit row_count 与 order by 一起使用,那么在找到第一个 row_count 就停止排序,直接返回。
结论:
只要加两个排序规则就行了
如:order by sort是一个排序规则,则改为order by sort createtime 两个排序规则。先按sort排序,然后再按create_time排序。