分页后数据重复

分页后数据重复

现象

数据查询的时候,第一页和第二页的数据不是完全相同,但是又一个重复数据

原因

去数据库查了,并没有重复数据
执行了sql
大概类似是这样的

select id,sex,name,scope
from student s
left join achieve a 
on s.id=a.sid
where 
name like '%王%'
group by s.id
order by
scope asc
limit 0,10

不分页的时候,数量是对得上的,limit 0,10 limit 10,10 limit 20,10的时候数量加一起也是对的,但是limit 0,10 和limit 10,10就有一个重复数据
然后发现查询的结果 order by的scope 这个字段值是一样的,然后查了资料发现,当order by 和limit同时出现的时候,执行顺序是form… where… select… order by… limit…
在完成 select 之后,所有记录是以堆排序的方法排列的,在进行 order by 时,仅把 scope 值大的往前移动,但是因为查询结果里scope 是一样的,堆排序又是无序的,所以sql limit拿的时候是看见什么拿什么,所以有概率第二页第一页数据重复

解决

加一个第二排序字段 id

select id,sex,name,scope
from student s
left join achieve a 
on s.id=a.sid
where 
name like '%王%'
group by s.id
order by
scope asc,id asc
limit 0,10

参考文档

MySQL分页时使用 limit+order by 会出现数据重复问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值