我有一个数据列,其中包含一些 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
关于MySQL SELECT JSON 数组中的所有 ids 和子 ids,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905191/