分页查询
1、limit start,count语法
select * from 表名 limit start,count
说明:
limit
是分页查询关键字start
表示开始行索引,默认是0count
表示查询条数
例1:查询前3行男生信息:
select * from students where gender=1 limit 0,3;
类比:
已知每页显示m条数据,求第n页显示的数据
提示: 关键是求每页的开始行索引
查询学生表,获取第n页数据的SQL语句:
select * from students limit (n-1)*m,m
2、LIMIT OFFSET 语法
分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT <N-M> OFFSET <M>子句实现
例:
我们把结果集分页,每页3条记录。要获取第1页的记录,可以使用LIMIT 3 OFFSET 0:
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 0;
上述查询LIMIT 3 OFFSET 0
表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。
如果要查询第2页,那么我们只需要“跳过”头3条记录,也就是对结果集从3号记录开始查询,把OFFSET
设定为3:
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 3;
3、子查询分页
越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢
。此时,我们可以通过子查询的方式来提高分页效率,大致如下:
SELECT * FROM students WHERE id >=
(SELECT id FROM students WHERE book_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
4、JOIN分页方式
SELECT * FROM `content` AS t1
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;