我使用PHP-MySQLi-Database-Class来构造查询,它在MySQL上运行良好,但是在切换到MariaDB数据库之后,一个特定的查询抛出了这个错误:(对不起,长文本)
*非常规异常:您的SQL语法出现了错误;请检查与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在属性为_sub_attr JSON_EXTRACT(sub_prop_attr.attrib_te.在第1行查询: SELECT,p.id AS id,DATEDIFF(CURDATE(),DATE(p.created))作为天数,合并(bed_room,bath_room,停车场,construction_size,lot_size,WHERE,building_age)作为chs,(选择JSON_OBJECTAGG(attribute_name ),(选择CAST(CONCAT('',p.created‘)作为JSON)从属性_sub_attr JSON_EXTRACT(sub_prop_attr.attrib_terms,( JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms,'one',_sub_attr.id)(从prop_attributes作为sub_prop_attr左连接属性作为sub_attr on sub_prop_attr.attribute_id = sub_attr.id prop_id = p.id)作为JSON_attributes从属性p左联接(选择id、state_name、CONCAT(“en”、state_name)作为state_alias从状态)上的p.state=s.id左联接(选择id,city_na in C:\wamp64...\classes\MysqliDb.php在线1819
...And这是一个查询:
SELECT *,p.id AS id, DATEDIFF(CURDATE(),DATE(p.created)) AS days,
COALESCE(bed_room,bath_room,parking,construction_size,lot_size,floors,building_age) AS chs ,
(SELECT JSON_OBJECTAGG(attribute_name,
(SELECT CAST(CONCAT(\'[\',GROUP_CONCAT(JSON_QUOTE(_sub_attr.attribute_name)),\']\') AS JSON)
FROM attributes AS _sub_attr
WHERE JSON_EXTRACT(sub_prop_attr.attrib_terms, JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms, \'one\', _sub_attr.id))) IS NOT NULL))
FROM prop_attributes AS sub_prop_attr LEFT JOIN attr';这是MySQL查询:
$Srelated_attributes = ", (SELECT JSON_OBJECTAGG(attribute_name, (SELECT CAST(CONCAT('[',GROUP_CONCAT(JSON_QUOTE(_sub_attr.attribute_name)),']') AS JSON) FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_terms, JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms, 'one', _sub_attr.id))) IS NOT NULL)) FROM prop_attributes AS sub_prop_attr LEFT JOIN attributes AS sub_attr ON sub_prop_attr.attribute_id = sub_attr.id WHERE prop_id = p.id) AS JSON_attributes";最后一个是一个很长的查询的一部分,如果我去掉这个部分,它就能工作了.我认为这可能与引号或JSON函数有关,但我没有找到任何好的解决方案来使相同的代码工作。
你们中有谁有过相关的经历吗?希望我对我的问题描述清楚了。
我希望我可以使用我的查询。另外,我已经尝试删除我在问题描述中引用的部分,错误就消失了,所以问题可能围绕在查询的那个部分。
发布于 2022-11-19 03:23:01
因为JSON不是SQL标准中的一个类型,所以MariaDB没有将CAST(... AS JSON)实现为它的非类型。
如果删除这些单词,CAST运算符将以相同的方式运行。
https://stackoverflow.com/questions/74496986
复制相似问题