MySQL SELECT JSON 数组中的所有 ids 和子 ids

标签 mysql json select

我有一个数据列,其中包含一些 json 数组记录,例如

[
  {
    "id": 4065,
    "pageTitle": "Lorem Ipsum",
    "children": [
        {
        "id": 4067,
        "pageTitle": "Foo",
      },
      {
        "id": 4072,
        "pageTitle": "Bar",
      }
  },
  {
    "id": 4070,
    "pageTitle": "Another Lorem Ipsum",
    "children": [
        {
        "id": 4068,
        "pageTitle": "Another Foo",
      },
      {
        "id": 4073,
        "pageTitle": "Another Bar",
      }
  }
]

下面的查询是获取所有父 ID 并忽略子 ID

SELECT JSON_EXTRACT(data, "$[*].id")
FROM `my_table`;

// Returns only 4065 & 4067

如何获取所有 id,甚至是子元素或孙元素等?

还有一种方法可以将结果作为单索引数组返回,例如

[4065, 4067, 4072, 4070, 4068, 4073]

或者这需要以编程方式处理,例如 php?

最佳答案

在 MySQL 5.7 中,JSON 功能受到一定限制。但是,您可以为 JSON_EXTRACT 提供多个路径,因此如果您的表深度不超过 2 层(即孙子级,但没有曾孙级),那么这将起作用:

SELECT JSON_EXTRACT(data, "$[*].id", '$[*].children[*].id', '$[*].children[*].children[*].id')
FROM my_table

Demo on dbfiddle

关于MySQL SELECT JSON 数组中的所有 ids 和子 ids,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905191/

相关文章:

php - PDOStatement 执行不使用 Mysql-ODBC 填充值

php - mysql INSERT INTO循环不插入一些行

json - 在perl中循环遍历json

mysql - 从带有 WHERE 的 SELECT 中插入 - 如果存在?

javascript - 使用 Angular 从下拉列表中获取选定的值

php - 执行查询时,我在 wampserver MySql 5.7.14 中收到与 sql_mode=only_full_group_by 相关的错误

mysql - 按位运算的替代方法

javascript - Axios 使用 React 自动刷新

angularjs - MediaWiki 查询和/或 WikidataQuery 查找维基百科文章

php - MySQL - 从 url ID 选择行值