对MYSQL中json数据格式的多对多匹配 2018-08-24

1. 背景介绍

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

对MYSQL中json数据格式的多对多匹配 2018-08-24_第1张图片
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)
对MYSQL中json数据格式的多对多匹配 2018-08-24_第2张图片
xml中针对标签字段多对多查询语句

3.疑点

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


对MYSQL中json数据格式的多对多匹配 2018-08-24_第3张图片
两次查询结果不同,total应该都为1的

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


对MYSQL中json数据格式的多对多匹配 2018-08-24_第4张图片
这是xml里定义的转换后的sql语句

对MYSQL中json数据格式的多对多匹配 2018-08-24_第5张图片
去掉拼接,直接加参数,这样是有数据的

解决办法:

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


对MYSQL中json数据格式的多对多匹配 2018-08-24_第6张图片
json_contains()不传数组类型参数

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

你可能感兴趣的:(对MYSQL中json数据格式的多对多匹配 2018-08-24)