数据表
id uid info
1 1001 {"name":"周年庆","status":0,"addtime":"2017-10-10"}
2 1002 [ {"name":"周年庆","status":1,"addtime":"2017-10-11"},{"name":"特价促销","status":0,"addtime":"2017-10-12"}]
3 1003 [ {"name":"特价促销","status":1,"addtime":"2017-10-12"},{"name":"国庆促销","status":0,"addtime":"2017-09-28"}]
比如要按 info字段中的 name和status去匹配一条记录,用Json_Contains如何实现。
select * from t where JSON_CONTAINS(info->'$[*].name', '"周年庆"', '$') AND JSON_CONTAINS(info->'$[*].status', '"1"', '$')
这样的语法,是会匹配到3条记录的.但是期望的结果是id为2的这条记录被匹配到。
mysql 5.7.16
返回一条记录.
不过你的sql有点问题,
select * from t where JSON_CONTAINS(info->'$[*].name', '"周年庆"', '$') AND JSON_CONTAINS(info->'$[*].status', '1', '$')
最后这个状态应该是个数值,不是文本,如果你这样的是文本,应该一个也出不来.
而且,我觉得这个sql确实逻辑有问题,但是我没环境,测不了5.7.9的问题了
嗯。是的,这个字段匹配格式写的有点问题。
但是问题表达的是,多个条件用Json_Contains()去匹配一行记录的问题。貌似无法实现,我现在暂时改成直接查询明细表,后面再改用文档数据库实现