SQL LIMIT语法错误

时间:2011-08-31 19:31:11

标签: mysql limit

所以这就是整个事情:

SELECT * FROM sometable LIMIT 5*DATEDIFF(NOW(), '2011-08-30'), 5

错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'* DATEDIFF(NOW(),'2011-08-30'),5'在第1行

问题显然是LIMIT显然不接受任何除整数之外的任何东西。它也不会接受1+1(1+1)作为值。有办法解决吗?

只是你不必去尝试,5*DATEDIFF(NOW(), '2011-08-30')工作得很好。

我正在尝试修复this回答..

2 个答案:

答案 0 :(得分:2)

NO ,在普通的mysql中是不可行的 (但是,可以通过存储过程,用户定义的函数)

你的情况,它可以通过PHP调用轻松替换

$offset = 5*
        date_diff(new DateTime('now'), new DateTime('2011-08-31'))->format('%a');
$sql = "SELECT * FROM sometable LIMIT {$offset},5";

答案 1 :(得分:1)

限制必须是整数或局部变量。来自MySQL docs

  

LIMIT子句可用于约束返回的行数   通过SELECT语句。 LIMIT需要一个或两个数字参数,   这些必须都是非负整数常数   例外:

     
      
  • 在预准备语句中,可以使用指定LIMIT参数   ?占位符标记。

  •   
  • 在存储的程序中,LIMIT参数可以使用整数值例程参数或MySQL中的局部变量来指定   5.5.6。

  •