2014-09-25 46 views
1

我有错误在我的语法:MySQL的限制与可变

SET @start := 0; 
SELECT (ROUND((count(item))/2)) FROM car INTO @until; 
SELECT * from car limit @until OFFSET @start; 

你有一个错误的SQL语法;检查对应于您的MySQL服务器版本的手册,在第1行使用'@until OFFSET @start'附近的正确语法。

任何人都可以帮助我? 感谢

回答

0

不能在LIMIT子句中使用用户指定的变量(@until)。

一种可能的方案(关于this的变化):

SELECT (ROUND((count(item))/2)) FROM car INTO @until; 
SELECT * FROM (
    SELECT *, 
     @rownum := @rownum + 1 AS rank 
    FROM car, 
     (SELECT @rownum := 0) r 
) d WHERE rank < @until; 

唯一的缺点是你丢失了偏移,但可以容纳,通过调节WHERE子句。否则,您可以使用存储过程。

+0

[错误] 1064 - 您的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以便在第1行':= @until'附近使用正确的语法 – empugandring 2014-09-25 08:44:04

+0

废弃这个问题,问题在于您使用带有LIMIT的变量。看来你不能在那里使用它:http://stackoverflow.com/questions/245180/variable-limit-clause-in-mysql。我会用可能的解决方案更新我的答案。 – kasimir 2014-09-25 09:56:17