当前位置:   article > 正文

mysql order by+limit数据重复问题_order by limit数据重复

order by limit数据重复

    前段时间遇到一个问题mysql查询问题,当我们使用select * from xxxx_tbl order by col1 limit 0,5 时,如果col1在表中存在重复,那么我们通过limit分页查出来的数据就可能存在不全,或者重复。

案例

表结构如下:

字段类型注释
idvarchar(20)主键
col1varchar(20)col1
col2varchar(20)col2
col3varchar(20)col3

全表查询:

SELECT * FROM test1 ORDER BY col1 DESC;
  • 1

数据为:

idcol1col2col3
155910
12256
14278
16245
11123

其中col1字段不是唯一的,第二第三第四行的col1都是2。

分页查询第一页:

SELECT * FROM test1 ORDER BY col1 DESC LIMIT 0,3;
  • 1

查询结果:

idcol1col2col3
155910
16245
12256

这里就会发现,有limit和没有limit查出来的顺序就不一样了。我们再来查第二页:

SELECT * FROM test1 ORDER BY col1 DESC LIMIT 3,6;
  • 1

查询结果:

idcol1col2col3
16245
11123

我们就会发现,16-2-4-5这条记录在两页里都出现了。而14-2-7-8,这条数据两页中都不存在。

原因

摘自mysql官方文档有这么一段话:
在这里插入图片描述
    意思是如果order by的字段有多个行都有相同的值,mysql是会随机的顺序返回查询结果的,具体依赖对应的执行计划(实际的sql是什么)。也就是说如果排序的列是无序的,那么排序的结果行的顺序也是不确定的。

解决方案

    既然官方文档里给出解释了,那也就不必深究了,那解决方案有两种:

  1. 使用唯一键作为排序字段
  2. 如果你一定要使用类似col1这样的字段,那你可以在后面加一个辅助排序字段,形成排序组合:
SELECT * FROM test1 ORDER BY col1,col2 DESC LIMIT 0,3;
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/139442
推荐阅读
相关标签
  

闽ICP备14008679号