当前位置:   article > 正文

SQL进行Order by排序再进行分页limit取值会出现重复显示问题_order by limit 分页,出现重复数据

order by limit 分页,出现重复数据

初始化数据库

SELECT id, org_id, name, type, type_id, create_time
FROM jmzl_tag
WHERE (type = 0 AND org_id IN (284, 272))
order by create_time desc
  • 1
  • 2
  • 3
  • 4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVZI9lmL-1615363274030)(assets\image-20210204110325242.png)]

如图所示,一共是24条数据,按照创建时间倒序,需要注意的是创建时间(create_time)中有些是相同的。

出现问题

分页查询,一页10条

第二页数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9NlYjSl-1615363274036)(assets\image-20210204110439928.png)]

第三页数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZBKzkZ6-1615363274039)(assets\image-20210204110522023.png)]

问题:可以看到第二页和第三页数据出现重复

原因分析

数据库order by排序不唯一,会导致最终的数据排序是不是稳定的。只有保证order by排序唯一,才会导致结果不重复

对于limit来说它是MySQL数据库顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。其实简单的说就是,你去查数据库,limit就是MySQL根据返回数据的顺序给他的一个编号,谁先返回谁就是1,如果不存在order by排序条件那么它就是MySQL的存储顺序。

当本文中取出的数据的create_time这个字段的值是一样的时候,MySQL在返回数据时,返回数据顺序不是固定的,我们取前8个数据的时候,数据库返回数据的顺序,与我们取前15个数据时,数据库返回数据的顺序是完全不同的,于是他生成的limit伪列编号就完全不一样,就导致了这样的错误。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/139400
推荐阅读
相关标签
  

闽ICP备14008679号