【问题标题】:MariaDB 10.2 Query with JSONMariaDB 10.2 使用 JSON 进行查询
【发布时间】: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


【解决方案1】:

这里有两个问题;

  1. WHERE 子句中的order_row 替换为相应的 表达式,JSON_VALUE(cms_routing_data, "$.cms_routing_date.field")
  2. cms_routing_data 不是 MariaDB 的有效 JSON,它已被序列化。

一个有用的工具是 dbfiddle 来找出答案。

感谢@sticky-bit 和@wchiquito。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2020-11-13
    相关资源
    最近更新 更多