2014-10-01 85 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