分页查询出现重复数据

目录

问题描述

问题表现 

问题原因 

解决方法


问题描述

  • 使用laravel做分页列表查询接口,每页返回5条数据,
  • 发现请求1页,2页最后一条数据出现重复,
  • 而总数据量不变,导致有一条数据被覆盖。

问题表现 

第一页请求参数如下:

返回数据如下:

 第二页请求参数如下:

 返回数据如下:

有一条数据缺失了,即: 

 

问题原因 

1.经查询数据库表,该数据确实存在
那明显就是业务实现有误。
2.对业务实现sql进行排查并测试,发现最终原因是排序导致。

实现代码如下:

$data = $conn->skip($offSet)->take($count)
->orderBy('is_expire', 'desc')
->orderBy('overtime', 'asc')
->getArray($key);

 这一类的问题,隐藏比较隐秘,即当is_expire,overtime这两个参数都相等的多条数据存在时,

才会出现数据重复显示问题。数据表查询没有一个决定性的排序条件,多条数据比较条件一致,

则会认为返回哪个都一样,最终就出现第一二页有一条重复数据。

解决方法

在排序的两个条件之后,在加一条决定性的排序条件,使每一条数据都是唯一的,这样就不会有数据被覆盖情况出现。
实现代码如下:

$data = $conn->skip($offSet)->take($count)
->orderBy('is_expire', 'desc')
->orderBy('overtime', 'asc')
->orderBy('id', 'asc') # 增加id排序
->getArray($key);

 在这里记录一下,以备查阅,毕竟好记性不如烂笔头。虽然问题解决容易,但是不暴露也无法解决,尤其当一个业务没有问题且需求不变的时候,我们通常不会去查看它,还是从平时开发时注意细节入手吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值