目前我使用offset
和limit
从表中检索有限数据,但是当我将数据库从development
移动到hosting server
时,它会在查询时显示语法错误,如果我删除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;
答案 0 :(得分:1)
根据官方的mysql网站:
为了与PostgreSQL兼容,MySQL支持LIMIT row_count OFFSET偏移语法。
我认为你的语法是正确的,问题可能在于LIMIT/OFFSET
子句中使用的过程变量,或者数据库引擎解释它可能具有较旧的不兼容版本的方式解释OFFSET
。
作为替代解决方法,请尝试在LIMIT子句中使用,
逗号分隔来指定OFFSET
,这可能会解决问题。
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;
答案 1 :(得分:0)
您的问题很可能是由于您的托管服务提供商使用的旧版MySQL服务器而不是您在测试中使用的版本。
您描述的问题是MySQL中已修复的错误:http://bugs.mysql.com/bug.php?id=11918
该修复程序自2010年第三季度开始发布,版本为5.5.6。 http://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-6.html
如果您的托管服务提供商拥有5.5.6之前的MySQL版本,这就解释了您的难度。发出
STATUS
命令MySQL让它告诉你它的版本等等。
答案 2 :(得分:0)
您不能像这样填写in_count
和in_offset
。 (类似地,您不能传入表名或其他一些结构。)
相反,使用CONCAT
构建一个字符串,其中包含填充了SELECT
等的in_count
。然后PREPARE
,EXECUTE
和{ {1}}。
(请勿使用DEALLOCATE
尝试填写USING
;由于同样的原因,它会失败。因此使用in_count
。)
参考:
例如:
CONCAT