我的语法错误:
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 :(得分: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 的记录