【发布时间】:2018-10-18 19:50:53
【问题描述】:
我的查询有问题;
SELECT *, JSON_VALUE(cms_routing_data, "$.cms_routing_date.field") AS order_row FROM database.cms_routing WHERE cms_routing_module = 'events' AND cms_routing_data != '' AND order_row >= '2018-05-11' ORDER BY order_row ASC LIMIT 0,4
我的数据库看起来像;
CREATE TABLE `cms_routing` (
`cms_routing_id` int(10) NOT NULL,
`cms_routing_module` varchar(50) DEFAULT NULL,
`cms_routing_data` longblob DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的 cms_routing_data 看起来像;
a:1:{s:16:"cms_routing_date";a:1:{s:5:"field";s:10:"2018-04-29";}}
PHPMyAdmin 响应;
#1054 - Onbekende kolom 'order_row' in where clause
有没有人有这方面的经验可以帮助我?
【问题讨论】:
-
@Taplar 我的错。
-
"Onbekende kolom" 似乎意思是“未知列”(荷兰语?)。表中确实没有列
order_row。它只是查询中的列别名,您不能在WHERE子句中使用列别名。这就是系统试图告诉你的。将WHERE子句中的order_row替换为相应的表达式JSON_VALUE(cms_routing_data, "$.cms_routing_date.field"),然后重试。 -
@stickybit 谢谢。是的,是荷兰语,对不起。我的新查询没有 MySQL 错误,所以看起来不错。但不幸的是,我没有得到任何结果。它在 cms_routing_data 内失败。
-
我用jsonpath.com 测试了我的 JSONPath 语法,这给了我正确的结果。但是我的查询中的同一个 JSONPath 不会返回任何结果当您仔细查看查询和我的示例 cms_routing_data 时,您会注意到不会有基于示例的匹配项。但我正在测试的真实数据库确实有很多匹配但不匹配的记录。
-
cms_routing_data是 MariaDB 的有效 JSON 吗?请参阅 dbfiddle。
标签: json mariadb mysql-json