Mysql 中 json、JsonArray 类型字段中指定属性的模糊查询问题
解决json类型字段的模糊查询:
存储的数据格式:{“type”: “10”, “mobile”: “13545678900”, “countryCode”: “86”, “name”:张三的订单}
select * from a where mobile_json->’$.mobile’ like ‘%135%’
解决json类型字段的精确查询
数据存储格式:{“type”: “10”, “mobile”: “13545678900”, “countryCode”: “86”, “name”:张三的订单}
select * from a where mobile_json-> ‘$.mobile’ = 13545678900
解决 JsonArray 类型字段的模糊查询:
存储的数据格式: [{“type”: “10”, “mobile”: “13545678900”, “countryCode”: “86”, “name”:张三的订单}]
select * from a where mobile_json->’$[*].mobile’ like ‘%135%’
select * from a where JSON_EXTRACT(mobile_json, ‘$[*].mobile’) LIKE ‘%$135%’
解决 JsonArray 类型字段的精确查询:
存储的数据格式: [{“type”: “10”, “mobile”: “13545678900”, “countryCode”: “86”, “name”:张三的订单}]
select * from a where JSON_CONTAINS(mobile_json,JSON_OBJECT(‘mobile’, “13545678900”))
thinkphp 或 laravel 写法
// 精确匹配
$query->whereRaw(“JSON_CONTAINS(mobile_json, JSON_OBJECT(‘mobile’, “. $value.”))” )
// 模糊匹配
$query->whereRaw(“mobile_json->’$[*].name’ like ‘%$value%’” );
$query->whereRaw(“JSON_EXTRACT(mobile_json, ‘$[*].name’) LIKE ‘%$value%’” );
本作品采用《CC 协议》,转载必须注明作者和本文链接