JSON数组上的MySQL通配符
我试图使用通配符提取JSON中包含的数组中的ID5384。我遇到的问题是ID的位置对于数组中的每个元素都没有固定的位置。该数组中的JSON示例如下,其中id:5384可以占据不同的索引位置:JSON数组上的MySQL通配符,mysql,sql,arrays,json,Mysql,Sql,Arrays,Json,我试图使用通配符提取JSON中包含的数组中的ID5384。我遇到的问题是ID的位置对于数组中的每个元素都没有固定的位置。该数组中的JSON示例如下,其中id:5384可以占据不同的索引位置: { "id":7465115, "name":"BCA_WS_FBX_Nielsen PRIZM_Test_Unlock_1x1", "advertiser_id":155085, "pixels":[ { "id":416491, "pixel_template
{
"id":7465115,
"name":"BCA_WS_FBX_Nielsen PRIZM_Test_Unlock_1x1",
"advertiser_id":155085,
"pixels":[
{
"id":416491,
"pixel_template_id":null,
},
{
"id":5384,
"pixel_template_id":null,
}
]
}
我的质询如下:
SELECT id, json FROM PROD_APPNEXUS.dimension_json_creatives
WHERE JSON LIKE ('%pixels%_%"id":5384,%') AND MEMBER_ID = 364
我试图只提取像素数组中ID为5384的项目
任何关于如何实现这一目标的评论都将受到高度重视,谢谢
更新:MySQL版本5.6.17
Sam我唯一想到的方法是使用MySQL的REGEXP语法:
SELECT id, json FROM PROD_APPNEXUS.dimension_json_creatives
WHERE (JSON REGEXP '("pixels":\[)?.*"id":5384') AND MEMBER_ID = 364
我想到的唯一方法是使用MySQL的REGEXP语法:
SELECT id, json FROM PROD_APPNEXUS.dimension_json_creatives
WHERE (JSON REGEXP '("pixels":\[)?.*"id":5384') AND MEMBER_ID = 364
尝试:
。MySQL 5.7.8+
选择
`id`,
`json`-数据类型json
从…起
`PROD\u APPNEXUS`.`dimension\u json\u creatives`
哪里
JSON_包含`JSON`、'{id:5384}'、'$.pixels'和
`成员ID`=364;
更新
使用5.6.17,一个选项是:
选择
`id`,
`json`
从…起
`PROD\u APPNEXUS`.`dimension\u json\u creatives`
哪里
`json“REGEXP”像素:\\[.*id:5384.*]'和
成员ID=364;
性能可能会受到表中元组数的影响。请尝试:
。MySQL 5.7.8+
选择
`id`,
`json`-数据类型json
从…起
`PROD\u APPNEXUS`.`dimension\u json\u creatives`
哪里
JSON_包含`JSON`、'{id:5384}'、'$.pixels'和
`成员ID`=364;
更新
使用5.6.17,一个选项是:
选择
`id`,
`json`
从…起
`PROD\u APPNEXUS`.`dimension\u json\u creatives`
哪里
`json“REGEXP”像素:\\[.*id:5384.*]'和
成员ID=364;
根据表中元组的数量,性能可能会受到影响。请尝试:
SELECT
`id`,
JSON_EXTRACT(json, '$.pixels') as pixels
FROM
`PROD_APPNEXUS`.`dimension_json_creatives`
WHERE
JSON_CONTAINS(`json`, '{"id": 5384}', '$.pixels') AND
`MEMBER_ID` = 364;
请注意,您需要MySQL的版本>=5.7.8才能运行此功能请尝试:
SELECT
`id`,
JSON_EXTRACT(json, '$.pixels') as pixels
FROM
`PROD_APPNEXUS`.`dimension_json_creatives`
WHERE
JSON_CONTAINS(`json`, '{"id": 5384}', '$.pixels') AND
`MEMBER_ID` = 364;
请注意,您需要一个版本>=5.7.8的MySQL才能运行此功能您是否应该删除LIKE表达式中的下划线?我在想,也许使用%\u%可以搜索像素,然后忽略所有非id:5384的字符,直到找到id:5384。确定,但是如果元素是数组中的第一个匹配项,则会丢失该元素。在任何情况下,考虑一下MySQL的5.7 JSON搜索功能:我认为%%会忽略{括号,而不是该ID的第一个匹配项(如果是这样的话)?您不应该删除LIKE表达式中的下划线吗?我想也许使用%%可以搜索像素,然后忽略所有非ID:5384的字符,直到找到ID:5384。当然,但是如果元素是数组中的第一个匹配项,您将错过该元素。I在任何情况下,考虑一下MySQL的5.7 JSON搜索功能:我认为%%会忽略{括号,如果是这种情况,则不是该ID的第一次出现?为我的版本工作。谢谢为我的版本工作。谢谢。我如何更新值?在这种情况下,我如何更新值?在这种情况下,我如何更新值?5384