一、 场景如下:
数据表:父订单表 order_parent
字段:优惠明细 discount_detail(格式:json,例子
[{"id": 157, "tip": "Coupon", "name": "优惠券"}])
目的:查询discount_detail中tip为指定值的所有数据,以统计营销活动相关支出(如优惠券Coupon)
二、探索过程:
通过查询网上资料得知,json一维数组格式([1,2,3])可以用mysql函数 json_contains 通过
where json_contains(表字段,"要查询的值")
查询;嵌套数组格式({“id”:{“name”:”张三”}})查询name为张三 采用
where json_contains(表字段,"张三", '$."id"."name"')
但是对于格式形如[{“id”: 157, “tip”: “Coupon”, “name”: “优惠券”}],这样的二维数组,一般的查询方法都不能生效
三、最终结果:
依然可以用 json_contains,不过里面要额外用一个函数 json_array 或者 json_object
完整查询语句如下:
select * from order_parent where json_contains(discount_detail->'$[*].tip',json_array("Coupon"),'$')
或者
select * from order_parent where json_contains(discount_detail, json_object("tip", "Coupon"))