一、分页需求:
客户端通过传递start(页码),pageSize(每页显示的条数) –> 显示 第2页,每页显示10条数据(2,10)
两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:
比如:
查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
查询第11条到第20条的数据的sql是:select * from table limit 10,10; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
查询第21条到第30条的数据的sql是:select * from table limit 20,10; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;
注意: Limit语句排在order by语句之后执行
limit语句后面跟一个参数,表示直接查询第几条记录
limit语句后面跟两个参数,表示直接查询第几条记录–第几条记录,下标从0开始,查的总条数
select `name` from tb_user order by phone; -- 查询所有用户名字
钱
孙
王
李
赵
周
吴
郑
王
select `name` from tb_user order by phone limit 2; -- 查询前两条记录
钱
孙
select `name` from tb_user order by phone limit 2,3; -- 查询3-5名用户
王
李
赵
select `name` from tb_user order by phone limit (2-1)*3,3; -- 分页查询 显示第2页,每页3条记录
select `name` from tb_user order by phone limit 3,3;
李
赵
周
二、总结:
通过上面的分析,可以得出符合我们需求的分页sql格式是:
select * from table limit (start-1)*pageSize,pageSize; 其中start是页码,pageSize是每页显示的条数。
三、附文:
上文仅介绍了MySQL分页的计算公式,如果数据较多时直接使用limit会耗时比较长,详情请阅读: