我正在使用PHP-MySQLi-Database-Class为了构建查询,它在MySQL上工作得很好,但在切换到MariaDB数据库后,特定的单个查询会抛出这个错误:(抱歉的长文本)
*Uncaught Exception:你的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在"JSON"附近使用FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_te…在第一行查询:SELECT,pid作为id, DATEDIFF(CURDATE(),DATE(p.created))作为days, COALESCE(bed_room,bath_room,parking,construction_size,lot_size,floors,building_age)作为chs, (SELECT JSON_OBJECTAGG(attribute_name, (SELECT CAST(CONCAT('[',GROUP_CONCAT(JSON_QUOTE(_sub_attr_attribute_name)),']')作为JSON) FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr. properties))attrib_terms JSON_UNQUOTE (JSON_SEARCH (sub_prop_attr。attrib_terms, 'one', _sub_attri .id))))))不是NULL)) FROM prop_attributes AS sub_prop_attr LEFT JOIN attributes AS sub_attr ON sub_prop_attr。Attribute_id = sub_attr。LEFT JOIN (SELECT id, state_name, CONCAT("en ",state_name) AS state_alias FROM states) s on p.s state=s。
…这是查询:
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函数有关,但我还没有找到任何好的解决方案来使相同的代码工作。
你们中有人有过相关的经历吗?希望我的问题描述清楚了。
我希望我可以使用我的查询。此外,我还尝试删除我在问题描述中引用的查询部分,错误消失,所以我的问题可能是围绕该部分查询。
因为JSON
不是SQL标准中的类型,所以MariaDB没有实现CAST(... AS JSON)
,因为它不是类型。
如果你去掉这些字,CAST
运算符将以同样的方式运行。