【问题标题】:How select mysql with condition on nested array json?如何在嵌套数组json上选择带有条件的mysql?
【发布时间】:2019-11-12 17:35:55
【问题描述】:

我正在创建一个有一个 json 列的表,插入的数据具有以下结构:

{
   "options" : {
      "info" :  [
                 {"data" : "data1", "verified" : 0},
                 {"data" : "data2", "verified" : 1},
                 ... and more
                ],
     "otherkeys" : "some data..."
   }
}

我想运行查询以获取data of verified = 1 "info"

这是针对在 Windows 10 上运行的 mysql 5.7 社区

    select id, (meta->"$.options.info[*].data") AS `data`
    from tbl
    WHERE meta->"$.options.info[*].verified" = 1

期待“data2”的输出,但实际输出什么都没有。

以下查询完美运行

    select id, (meta->"$.options.info[*].data") AS `data`
    from tbl
    WHERE meta->"$.options.info[1].verified" = 1

但我需要搜索数组中的所有项目,而不仅仅是索引1

如何解决?

(抱歉英语不好)

【问题讨论】:

    标签: mysql arrays json


    【解决方案1】:

    试试:

    SELECT `id`, (`meta` -> '$.options.info[*].data') `data`
    FROM `tbl`
    WHERE JSON_CONTAINS(`meta` -> '$.options.info[*].verified', '1');
    

    dbfiddle

    【讨论】:

    • 几乎解决了我的问题。但是如何只检索dataverified = 1 ?如果至少有一个verified = 1,您的查询将返回所有数据。在您的链接上,data1data2 也已返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多