Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法在存储过程中使用偏移量和限制_Mysql - Fatal编程技术网

Mysql 无法在存储过程中使用偏移量和限制

Mysql 无法在存储过程中使用偏移量和限制,mysql,Mysql,目前我正在使用offset和limit从表中检索有限的数据,但是当我将数据库从development移动到托管服务器时,查询时会显示语法错误,如果我删除offset和limit语法,它会工作得很好。对这个问题有什么想法或解决办法吗 SELECT e.A, e.B, e.C, e.D, e.E, e.F, e.G FROM T1 e where e.A = 1 order by e.B desc

目前我正在使用
offset
limit
从表中检索有限的数据,但是当我将数据库从
development
移动到
托管服务器
时,查询时会显示语法错误,如果我删除
offset
limit
语法,它会工作得很好。对这个问题有什么想法或解决办法吗

    SELECT
    e.A,
    e.B,
    e.C,
    e.D,
    e.E,
    e.F,
    e.G
    FROM
    T1 e
    where e.A = 1
    order by e.B desc
    limit in_count
    offset in_offset;

根据mysql官方网站:

为了与PostgreSQL兼容,MySQL支持限制行数 偏移语法

我认为您的语法是正确的,问题可能在于
LIMIT/OFFSET
子句中使用的过程变量,或者数据库引擎对它的解释方式可能有一个旧的不兼容版本,无法解释
OFFSET

作为替代解决方法,尝试在LIMIT子句中使用
逗号分隔符来指定
偏移量,这可能会解决问题

SELECT
    e.A,
    e.B,
    e.C,
    e.D,
    e.E,
    e.F,
    e.G
    FROM
    T1 e
    where e.A = 1
    order by e.B desc
    limit in_offset,in_count;

您的问题很可能是由于主机提供商使用的MySQL服务器版本比您在测试中使用的版本旧

您描述的问题是MySQL中已修复的错误:

该补丁于2010年第三季度发布,版本为5.5.6。

如果您的主机提供商有5.5.6之前版本的MySQL,这就解释了您的困难所在。发布

 STATUS

命令MySQL,让它告诉您它的版本以及其他内容。

您不能像这样填写
在\u count
在\u offset
中。(同样,不能传入表名或其他一些构造。)

相反,使用
CONCAT
构建一个字符串,其中包含
SELECT
,并填充
in\u count
,等等。然后
准备
执行
解除分配

(不要使用
USING
尝试在_count
中填写
;它将因同样的原因失败。因此使用
CONCAT

参考:

例如:

SET @s = concat('SELECT * FROM ', uview, ' ORDER BY ', uindex, ' LIMIT ', offset, ',2000' );
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

(问题在于存储过程内部的替换。)Mysql过程可以应用直接SQL查询,而不需要准备语句。在这里,您可以传递任何形式的变量,只要这些变量被正确初始化,就可以进行替换。您可以将其称为解决方法,但实际上并不是主要问题@RickJames