首页 新闻 会员 周边 捐助

Mysql5.7.9之后的JsonObject类型数据的匹配函数Json_Contains

0
悬赏园豆:40 [已解决问题] 解决于 2021-08-24 11:19

数据表

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的这条记录被匹配到。

Code_Song的主页 Code_Song | 初学一级 | 园豆:51
提问于:2019-02-21 20:39
< >
分享
最佳答案
0

mysql 5.7.16
返回一条记录.
不过你的sql有点问题,
select * from t where JSON_CONTAINS(info->'$[*].name', '"周年庆"', '$') AND JSON_CONTAINS(info->'$[*].status', '1', '$')
最后这个状态应该是个数值,不是文本,如果你这样的是文本,应该一个也出不来.

而且,我觉得这个sql确实逻辑有问题,但是我没环境,测不了5.7.9的问题了

收获园豆:40
首席吐槽官秦寿 | 小虾三级 |园豆:601 | 2019-02-23 13:48

嗯。是的,这个字段匹配格式写的有点问题。
但是问题表达的是,多个条件用Json_Contains()去匹配一行记录的问题。貌似无法实现,我现在暂时改成直接查询明细表,后面再改用文档数据库实现

Code_Song | 园豆:51 (初学一级) | 2019-02-23 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册