ORDER BY 排序后,用 LIMIT 取前几条,发现返回的结果集的顺序与预期的不一样。

下面是我遇到的问题:

order by与limit注意事项_排序规则

order by与limit注意事项_sort排序_02

order by与limit注意事项_sort排序_03

可以看到,带 LIMIT 与不带 LIMIT 的结果与我预期的不一样,而且“很不可思议”,真是百思不得其解。

于是,改成 order by status,id就成了。

order by与limit注意事项_排序规则_04

原因:

对于 order by 查询,带或者不带 limit 可能返回行的顺序是不一样的。

如果 limit row_count 与 order by 一起使用,那么在找到第一个 row_count 就停止排序,直接返回。

结论:

只要加两个排序规则就行了

如:order by sort是一个排序规则,则改为order by sort createtime 两个排序规则。先按sort排序,然后再按create_time排序。