我们可以通过limit 实现对一个表数据的分页,现在我们来看一看吧!
分页公式:page_num=(total_record+page_size-1) / page_size
其中
page_num :为分成的总页数
total_record :为表中的记录总数
page_size :为分成的每一页中包含的记录数
limit n
表示从第0条记录开始(即偏移量为0)的n个记录
limit m,n
表示从第m条记录开始的n个记录。limit中记录的索引是从0开始的。
那当我要从第current_page页的某一行开始取之后那一页全部记录怎么办呢?
我们可以使用:
limit (current_page-1)*page_size , page_size
如:需要以5条记录作为一页,查找第一页的所有记录
select *
from employees
limit 0,5;
如:需要以5条记录作为一页,查找第二页的所有记录
select *
from employees
limit 5,5;
如:需要以5条记录作为一页,查找第六页的所有记录
select *
from employees
limit 25,5; 因为(25=(6-1)*5)
注意:
limit 后面不能接运算符,只能是常量
在MySQL中如果像下面这样写的话会报错:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(6-1)*5,2’ at line 3
select *
from employees
limit (6-1)*5,5
解决这个问题可以使用 concat函数计算出数值,以及动态sql语句
set @a=concat('select * from employees limit ',(6-1)*5,',5');
prepare texts from @a;
execute texts;
①prepare是预定义一个语句,并将它赋给texts,texts是不区分大小写的
如果新的prepare语句使用了一个已经存在的texts,那么原有的将被立即释放,即使这个新的prepare语句因为错误不能被正确执行
②execute语句中,如果texts不存在,将引发一个错误。