【问题标题】:Search in Json in mysql 5.7 [closed]在 mysql 5.7 中搜索 Json [关闭]
【发布时间】:2021-07-04 11:30:31
【问题描述】:

我想从 JSON 文件中搜索产品 ID,但我无法从 JSON 文件中搜索。在 JSON 字段值中添加多级,如下图所示。

我可以从其他文件中搜索数据,例如

SELECT equip_id FROM ' . $table. ' where  JSON_CONTAINS(category,["1"])

我想通过 productID 搜索产品,请告诉我如何实现。

下面是我的桌子的完整图片

【问题讨论】:

  • 出于好奇,如果您想像普通数据一样查询这些数据,为什么要将它存储在 JSON 中?如果使用普通行而不是 JSON 数组,使用普通列而不是 JSON 对象字段,编写 SQL 查询会简单得多。
  • 完全不清楚。以 CREATE TABLE + INSERT INTO 脚本的形式提供示例数据,而不是图片,并显示此示例数据所需的输出。
  • 不是 JSON_CONTAINS 而是 JSON_EXTRACT 按路径然后比较。
  • @BillKarwin,我的要求就是为什么我将数据保存在同一字段中
  • @Akina,这些(类别和产品)是我在数据库中的 JSON 字段。你能解释一下关于 JSON_EXTRACT 的更多信息吗?

标签: mysql mysql-5.7 mysql-json


【解决方案1】:

我创建了一个测试表:

mysql> select * from mytable;
+----------------------------------------------------------------------+------------+
| product                                                              | category   |
+----------------------------------------------------------------------+------------+
| [{"OrderId": 1, "productID": "1"}]                                   | ["2", "3"] |
| [{"OrderId": 2, "productID": "1"}]                                   | ["2", "3"] |
| [{"OrderId": 3, "productID": "1"}]                                   | ["2", "3"] |
| [{"OrderId": 4, "productID": "1"}]                                   | ["2", "3"] |
| [{"OrderId": 5, "productID": "1"}]                                   | ["2", "3"] |
| [{"OrderId": 6, "productID": "1"}, {"OrderID": 7, "productID": "2"}] | ["2", "3"] |
+----------------------------------------------------------------------+------------+

现在我想检查是否有任何产品有 productID 2 的订单?

mysql> select json_contains(json_extract(product, '$[*].productID'), '["2"]') as `product_2_present` from mytable;
+-------------------+
| product_2_present |
+-------------------+
|                 0 |
|                 0 |
|                 0 |
|                 0 |
|                 0 |
|                 1 |
+-------------------+

【讨论】:

  • 您的解决方案正在提供输出,我们可以在 where product_2_present=1 之类的查询中添加 where close 吗,因为我只想要有记录的不是全部
  • 是的,去试试吧。但是您不能在定义它的同一查询的 WHERE 子句中引用列别名,因此您必须将此查询放入子查询中。
【解决方案2】:

我用以下数据创建了一个临时表。

当我对上面的集合使用下面的查询时的输出

select * from table_name where json_contains(product, '{"productID" : "1"}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2021-10-29
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多