我有一个数据col,其中包含一些记录为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