前言
最近公司在做一项用户数据调查,需要统计某个值得使用频率,由于之前这个值是以一个JSON字符串形式存储的,所以不能直接用传统的方式匹配,幸亏现在数据库才做了升级版本到了5.7以后(支持JSON查询),要是放在以前,只有模糊匹配了。
分析
查看涉及到的字段是一个JSON对象数组类型,匹配的条件是用到对象的某一个字段,自然而然的想到了JSON_CONTAINS 函数来解决。
select *,JSON_EXTRACT(字段,'$[*].数组对象字段名称') from table_name
where JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))
实战
1 以产品表为例,创建name为测试字段
2 条件查询
3 获取数组里面对象的某个属性
演示视频
思考与总结
如果要取出数组中某一条数据,貌似MySQL就处理不了(如果大家有办法请评论一下),只有在内存中用java进行处理。所以如果涉及到查询条件的字段,不要以JSON数组的格式存储,将JSON数组拆分成一个表来单独存储。设计表时,千万不要为了图一时简单,为往后埋下坑。
,