分頁查詢
1、limit start,count語法
select * from 表名 limit start,count
說明:
limit
是分頁查詢關鍵字
start
表示開始行索引,默認是0
count
表示查詢條數
例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;