mysql - 如何在嵌套数组 json 上选择带有条件的 mysql?

标签 mysql arrays json

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

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

我想运行一个查询来获取 verified = 1 "info"的 data

这是针对在 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

如何解决?

(抱歉英语不好)

最佳答案

尝试:

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

参见 dbfiddle .

关于mysql - 如何在嵌套数组 json 上选择带有条件的 mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56846225/

相关文章:

mysql - 如何按小时和 30 分钟分组

MySQL 有限结果后的一行求和

python - 是否有一个 numpy 函数可以在多维数组中查找数组?

json - 为什么 tWriteJSONField 为空值创建一个数组?

MySQL 查询以计算值

Mysql 按键联接两个表

java - 数组方法和命令

javascript - 生成从 1 到 5 的给定输入选择可以生成的所有可能序列的列表

javascript - $jquery.post() PHP 和 Mysql

python - JSON 中双引号前添加反斜杠