在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。
user表共有8条数据,有4页数据,但是实际查询过程中第一页与第四页竟然出现了相同的数据。
如果想在Limit存在或不存在的情况下,都保证排序结果相同,可以额外加一个排序条件。例如id字段是唯一的,可以考虑在排序字段中额外加个id排序去确保顺序稳定。
所以上面的情况下可以在SQL再添加个排序字段,比如fund_flow的id字段,这样分页的问题就解决了。修改后的SQL可以像下面这样: SELECT * FROM user ORDER BY create_time,id LIMIT 6,2;
转自https://blog.csdn.net/weixin_34383618/article/details/93417704
在使用groupby和limit同时使用时,排序字段一定要加一个唯一性的字段 ,要不然会出现一些异常的情况(导出条数与查询数量一样,但根据指定条件查询时数据会缺失或有差异)