分页查询不到某条数据(因为排序问题导致),但是全部数据却有该条数据

1.问题描述

        如果发现想要查询某条数据时,用分页的时候,找遍了都找不到自己想要的那条数据。但是如果把分页每一页的数量调整之后或者直接显示全部数据的时候,那条数据却又能找出来了。

2.问题分析

        如果遇到类似上面这样的问题,建议可以考虑一下是否是你用来排序的字段的问题导致的。

举个例子:

        在一个分页中,我要按人员的打卡日期(createDate字段,这个字段只记录到年月日)倒序来查询每日的人员打卡记录(PersonRecord表),我是用的查询语句是select * from PersonRecord order by createDate desc。数据库里面一共有A,B,C,D,E,F,G,H,I,J,K,L,M,N这些人在2023年3月1日的打卡记录,分页按每10条数据一页。

        这个时候查询出来的数据可能就会发生问题,为什么呢?请看下图:

         由于我们排序的时候,只按了日期进行排序,同一日的多条数据每次查询出来的顺序不一样每次都一样。所以在我们第一次查询的时候,J排在了全部数据的第10位,第二次查询的时候,J却排在了第11位。在分页中,我们是每页查10条数据,当我们查第一页(次)的时候,J出现了在当页最后;当我们查第二页(次)的时候J出现在了当页的第一条数据;而K则在第一页的最后一条。所以这就是为什么我们找完第一、二页都没找到K,反而J出现了两次,是因为查第一页的时候K在第二页数据中,查第二页的时候,K又去了第一页数据中。

3.问题解决

        如何解决这个问题?问题的原因是由于排序字段不唯一,导致了排序每次的数据顺序都不一样。所以这个时候,我们只需要在排序的时候,再多加一个唯一标识或数值不会重复的字段即可。如:select * from PersonRecord order by createDate desc,id desc;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MrZhouGx

觉得对你有用的话可以支持一下

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

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

打赏作者

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

抵扣说明:

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

余额充值