mysql限制变量

时间:2014-09-25 08:09:57

标签: mysql variables limit

我的语法错误:

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”附近使用正确的语法

谁能帮帮我? 感谢

2 个答案:

答案 0 :(得分:0)

您无法在@until子句中使用用户指定的变量(LIMIT)。

可能的解决方案(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子句来适应这种情况。否则,您可以使用存储过程。

答案 1 :(得分:0)

你可以尝试这样的事情:

DELIMITER //
CREATE PROCEDURE pagination(
    INT pageno INT
)
BEGIN
    DECLARE pages INT;
    DECLARE pagefrom INT;

    SET pages = 1000; -- get this many records at a time
    SET pagefrom = pageno * pages; -- 2 * 1000 = 2000

    SELECT *
    FROM car
    LIMIT pagefrom, pages;
END //
DELIMITER ;

CALL pagination(2);

此示例将获取从 2000 到 3000 的记录