mysql order by limit分页时数据重复问题

在我们在使用mysql进行数据查询时往往会遇到数据量过大需要分页展示的问题,这时候就会使用limit关键字:

SELECT * FROM table LIMIT [param1,] param2;

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。

通常时在使用limit时,会辅以order by对结果进行排序,比如order by 创建时间 desc。
但项目中发现当order by后接的当待排序字段值相同时会出现一些问题。
问题:
 数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。
分页第一页:在这里插入图片描述
分页第二页:
在这里插入图片描述

一条订单数据分页中两页都出现了。
原因:
 如果指定ORDER BY语句,SQL Server将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”
解决办法:
保证排序字段唯一 或者 添加多个排序条件
在这里插入图片描述
总结:
ORDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。当ORDER子句中的条件有重复值时得到数据是随机的,当ORDER子句中定义了多个字段,则按照字段的先后顺序排序。

猜你喜欢

转载自blog.csdn.net/weixin_43828467/article/details/111193353