2014-10-01 10 views
1

我有查詢如何在MySQL中動態地限制LIMIT?

SELECT * 
LIMIT 3, (6 - 3) 

Wchich返回:

#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 - 3)' at line 2

我basicly想從3擋行選擇6行*,在MSSQL是WHERE RowNumber BETWEEN 3 and 6但動態地瞭解:from:to參數instaed :from:size

+0

SELECT * FROM your_table LIMIT 3,3 – Shafeeque 2014-10-01 11:33:13

+0

我討厭在那裏使用substarction,我想動態地使用':from'和':to'參數來計算它,而不是':from'和':size' – 2014-10-01 11:34:04

回答

1

USE OFFSET在這種情況下

SELECT name 
FROM your_db 
ORDER BY your_column DESC 
LIMIT 10 OFFSET 10 

LIMIT子句可用於約束SELECT語句返回的行數。 LIMIT需要一個或兩個數字參數,它們都必須是非負整數常量。

基本上,如果你不在存儲過程或準備好的語句中,你不能這樣做。

  • 在準備好的語句中,可以使用?指定LIMIT參數。佔位符標記。
  • 存儲程序中,LIMIT參數可以通過 整數值的常規參數或局部變量
  • 指定

所以,在存儲過程中,下面的工作:

declare from_row bigint; 
declare to_row bigint; 
SELECT name 
FROM your_db 
ORDER BY your_column DESC 
LIMIT from_row OFFSET (to_row-from_row); 
+0

但是仍然如何動態地獲取偏移量? 'LIMIT:from OFFSET:to - 1'給出錯誤'正確的語法使用附近' - 1'' – 2014-10-01 11:40:16

+0

@Ultra:我想現在它更清晰:) – 2014-10-01 12:24:46

+0

只是一個側面的問題,你會如何把DECLARE和SELECT相同的查詢?使用PDO並且僅限於一個。 – 2014-10-03 08:07:00