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

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条数据一页。

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

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

3.问题解决

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

你可能感兴趣的:(数据库,sql,mysql)