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

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()参数传“拼接的数组”出现查不到数据的问题了,至于这个拼接个人后期还有待研究哪里出问题了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,073评论 2 89
  • 昨天突然头晕恶心、腿脚酸软、困得睁不开眼,就这样还坚持上了一天的班,下班还陪小侄子玩了一个小时,昨天晚上九点睡下,...
    润伊阅读 281评论 0 0
  • "革",兽皮制衣为革,后引申为变。看卦画,一件兽皮上衣。 "鼎"、"革"互为覆卦,一个是做饭,一个是制衣,讲的就是...
    童年的流星阅读 2,167评论 0 6