所以想我有這個疑問:得到一個有序的MySQL查詢中第i個到第j行
SELECT * FROM t WHERE j = k ORDER BY l
是有辦法讓查詢只返回,例如第20至第40條記錄根據ORDER BY語句而不是返回由ORDER BY語句排序的所有行?
所以想我有這個疑問:得到一個有序的MySQL查詢中第i個到第j行
SELECT * FROM t WHERE j = k ORDER BY l
是有辦法讓查詢只返回,例如第20至第40條記錄根據ORDER BY語句而不是返回由ORDER BY語句排序的所有行?
SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20, 20
限制由20(第二個),從偏移量20開始,第一。
SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20 OFFSET 20;
限制說,你只需要20行,和偏移說,你不需要前20行。
請記住,當偏移值非常大時,您的查詢將會非常緩慢,因爲sql服務器將需要掃描第一行<offset>
行以將<offset>+<limit>
行返回給您。
http://dev.mysql.com/doc/refman/5.0/en/select.html
sample: SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
所以
SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20,20; #retrieve rows 20-40
您是否在the documentation中搜索?
的
LIMIT
子句可以用於約束的行數由SELECT
語句返回 。LIMIT
需要一個或兩個數字參數, ,它們都必須是非負整數常量(使用 準備語句時除外)。使用兩個參數,第一個參數指定要返回的第一行的偏移量,第二個參數指定要返回的最大數量的行數 。初始行的偏移量是0(不是1)。
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
對於兼容PostgreSQL,MySQL也支持
LIMIT
row_count
OFFSET
offset
語法。
SELECT * FROM t WHERE j = k ORDER BY l LIMIT 19,21
注:
有解決方案: SELECT * FROM t WHERE j = k ORDER BY l limit 21,20; (21是行數,20是起始行,因此如果它們存在,您將從第20行到第40行檢索行)