偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

前言

最近公司在做一项用户数据调查,需要统计某个值得使用频率,由于之前这个值是以一个JSON字符串形式存储的,所以不能直接用传统的方式匹配,幸亏现在数据库才做了升级版本到了5.7以后(支持JSON查询),要是放在以前,只有模糊匹配了。

分析

查看涉及到的字段是一个JSON对象数组类型,匹配的条件是用到对象的某一个字段,自然而然的想到了JSON_CONTAINS 函数来解决。

select *,JSON_EXTRACT(字段,'$[*].数组对象字段名称')  from table_name  where JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))


实战

1 以产品表为例,创建name为测试字段

偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

2 条件查询


偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

3 获取数组里面对象的某个属性


偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

演示视频

播放 暂停
进入全屏 退出全屏
00:00 00:00
重播 刷新试试

思考与总结

如果要取出数组中某一条数据,貌似MySQL就处理不了(如果大家有办法请评论一下),只有在内存中用java进行处理。所以如果涉及到查询条件的字段,不要以JSON数组的格式存储,将JSON数组拆分成一个表来单独存储。设计表时,千万不要为了图一时简单,为往后埋下坑。

您可能还会对下面的文章感兴趣: