对MYSQL中json数据格式的多对多匹配

2018-08-24  本文已影响367人  摩羯座李

1. 背景介绍

项目框架使用的是spring boot+mybatisplus等构建,现在接口需求是通过标签(label)匹配相应
的作品,这里production里存的是label的多个id集合,Mysql数据格式为json格式,存储格式如下:

production表中label字段
现在接口需求是通过前端传过来的id数据进行对label的多对多匹配。

2. 难点

由于是多对多匹配,所以在xml中先进行数组转list后对list的遍历,然后通过MYSQL JSON函数(主要用到这两个方法:JSON_CONTAINS(tags, '["xxx"]');和JSON_EXTRACT())

JSON_CONTAINS(tags, '["xxx"]');      查找目标中是否包含xxx
JSON_EXTRACT(目标json字段,"\$.name");是JSON提取函数,$.name 指json数据中的key值(通过key提取目标json中的value)
xml中针对标签字段多对多查询语句

3.疑点

一开始是遇到这个问题:用短字符串可以匹配到数据,字符串太长就没数据。


两次查询结果不同,total应该都为1的

接下来找到问题所在是因为数据拼接的问题:


这是xml里定义的转换后的sql语句
去掉拼接,直接加参数,这样是有数据的

解决办法:

这里出现该问题的原因应该就是这个sql拼接的问题,由于传进来的是遍历过后的单值,所以这里参数就不需要加“[]”了,直接用json_contains()方法以单个字符串的形式进行匹配。


json_contains()不传数组类型参数

这样就避免了json_contains()参数传“拼接的数组”出现查不到数据的问题了,至于这个拼接个人后期还有待研究哪里出问题了。

上一篇下一篇

猜你喜欢

热点阅读