美文网首页
对MYSQL中json数据格式的多对多匹配

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

作者: 摩羯座李 | 来源:发表于2018-08-24 10:50 被阅读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()参数传“拼接的数组”出现查不到数据的问题了,至于这个拼接个人后期还有待研究哪里出问题了。

    相关文章

      网友评论

          本文标题:对MYSQL中json数据格式的多对多匹配

          本文链接:https://www.haomeiwen.com/subject/oboviftx.html