SQL中limit与分页的结合

sql 复制代码
select * from test limit 2,10;

这条语句的含义:从第3条语句开始查询,共显示10条语句。

sql 复制代码
select * from test limit a,b;

a=0,第一条记录。

a=1,第二条记录。

a=2,第三条记录。

这条语句的含义:从第a+1条语句开始查询,共显示b条语句。

如果共有Record_num条数据,希望分页显示

每页rnpp条数据,共page_num页,最后一页记录数为lprn。

Record_num=page_num*rnpp+lprn;

已知Record_num,rnpp。

cpp 复制代码
lprn=Record_num%rnpp;
if(lprn==0){page_num=Record_num/rnpp;}
else {page_num=Record_num/rnpp+1;}

现在我想要获取第now_page页的相应数据,如何使用SQL表示?

思考:

相应数据从第几条记录开始,共有多少条?

设相应数据从第c条记录开始,共有b条。

第一页的第一条数据:c=1

第二页的第一条数据:c=1+rnpp;

第三页的第一条数据:c=1+rnpp*2;

第now_page页的第一条数据:c=1+rnpp*(now_page-1);

第now_page页共有多少数据呢?

分情况讨论:

(1)lprn=0,即每一页都有rnpp条数据。

(2)lprn!=0,前page_num-1页都有rnpp条数据,最后一页数据为lprn。

cpp 复制代码
if(lprn==0)b=rnpp;
else{
    if(now_page==page_num)b=lprn;
    else b=rnpp;
}

最后的相关SQL语句:

cpp 复制代码
a=c-1;
select * from test limit a,b;
相关推荐
My is 李豆1 小时前
CentOS 7 安装 MySQL 详细教程
mysql·centos
Menior_2 小时前
【MySQL】基本查询
数据库·mysql
一只游鱼3 小时前
Redis入门(部署、持久化、缓存问题)
数据库·redis·缓存
北城以北88884 小时前
数据库--MySQL数据管理
数据库·mysql
代码的余温4 小时前
Oracle RAC共享存储核心技术
数据库·oracle
float_六七4 小时前
数据库物理外键与逻辑外键全解析
数据库·oracle
大白的编程日记.4 小时前
【MySQL】数据库的基本操作
数据库·mysql·oracle
Jamie Chyi4 小时前
【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG
数据库·oracle
代码的余温4 小时前
Oracle高可用与容灾解决方案
数据库·oracle