Mysql如何查询某条记录在分页的第几页详析

 更新时间:2018年11月21日 08:39:55   作者:二师兄  
查询是我们日常工作中经常会遇到的一个功能,下面这篇文章主要给大家介绍了关于Mysql如何查询某条记录在分页的第几页的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

在实践中我们会遇到这样的问题,知道某条记录的id,然后需要判断此条记录如果按照id进行排序分页,此条记录在第几页。今天这篇文章为大家提供一个思路。

下面话不多说了,来一起看看详细的实现方法吧

根据ID查询分页位置

根据ID来查询分页位置,比如按照ID的倒序排列,则可通过以下SQL查询出大于此ID记录数:

select count(id) from user where id > 5;

示例中user为表名,5位待匹配的id。很显然,因为是倒序排序只需查找大于此id的记录数即可,如果是正序排列,则小于此id即可。

当查出count值之后,怎么计算当前记录位于第几页呢,这里以java代码示例计算:

int pageSize = 10;
// 假设上面查出的结果为count,值为11
int count = 11;
// 计算当前记录所在的pageNum
// 通过取模并加1获得当前页数为第2页
int pageNum = count/pageSize + 1;
// 如果想进一步获得在某页的某个位置,则再进行取余即可,即第2页的第1条记录(从0开始)
int index = count%pageSize;

多维度排序定位

上面通过简单的ID进行排序还是比较好解决的,那么如果现在查询某条记录排序的维度不仅仅是ID,比如先按照年龄(age)进行倒序排序,如果age相同,则再跟进ID进行倒序排序。基本的sql语句如下:

select id, age from user order by age desc,id desc;

此时我们知道某条id为5,age为18的记录,如何确定出此条记录在多条件排序中的位置呢。

首先,多条件排序的难度在于age相同的情况,如果age不相同,只需如下sql即可像《根据ID查询分页位置》一样定位出id的位置:

select count(id) from user where age > 18;

这样就可以查询出来此组合排序age不相同时此条记录的位置,具体位置的算法同第一种情况。

那么当age用重复的情况如何处理呢。当然,可以通过复杂的关联查询或子表查询来实现,这里通过另外一种方式,就是再查询一下age相同,并且id大于当前用户的记录条数:

select count(id) from user where age = 18 and id > 5;

上面获得了age相同情况下,并且id大于5的记录,将第一步和第二步的统计结果相加,问题是不是又回到了《根据ID查询分页位置》的简单模式了,还是同样的算法可以算出当前记录位于第几页了。

此种方案虽然查询了两次数据库,如果很好的建立索引,比关联查询或子查询要方便、简洁和高效一些。

小结

以上是在实践中遇到类似问题的两个思考维度,希望能给大家带来一个突破,同时也希望大家提供更好的方案。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • MySQL中的多表联合查询功能操作

    MySQL中的多表联合查询功能操作

    这篇文章主要介绍了MySQL中的多表联合查询功能操作,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • MySQL中对于not in和minus使用的优化

    MySQL中对于not in和minus使用的优化

    这篇文章主要介绍了MySQL中对于not in和minus使用的优化,作者给出了实例和运行时间对比,需要的朋友可以参考下
    2015-05-05
  • MySQL错误ERROR 1615 解决方法

    MySQL错误ERROR 1615 解决方法

    这篇文章主要介绍了MySQL错误ERROR 1615 解决方法,这个问题是由于Mysql配置不当造成的,需要的朋友可以参考下
    2015-01-01
  • Mysql中事务ACID的实现原理详解

    Mysql中事务ACID的实现原理详解

    这篇文章主要给大家介绍了关于Mysql中事务ACID实现原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Linux下mysql异地自动备份的方法

    Linux下mysql异地自动备份的方法

    这篇文章主要介绍了Linux下mysql异地自动备份的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • mysql 如何动态修改复制过滤器

    mysql 如何动态修改复制过滤器

    这篇文章主要介绍了mysql 如何动态修改复制过滤器,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-11-11
  • MYSQL 解锁与锁表介绍

    MYSQL 解锁与锁表介绍

    相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制
    2017-04-04
  • MySQL 数据类型及最优选取规则

    MySQL 数据类型及最优选取规则

    这篇文章主要介绍了MySQL 数据类型及最优选取规则,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • Mysql CAST函数的具体使用

    Mysql CAST函数的具体使用

    本文主要介绍了Mysql CAST函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • windows下忘记MySQL密码的修改方法

    windows下忘记MySQL密码的修改方法

    这篇文章主要介绍了windows下忘记MySQL密码的修改方法,需要的朋友可以参考下
    2014-03-03

最新评论