對MYSQL中json數(shù)據(jù)格式的多對多匹配 2018-08-24

1. 背景介紹

項(xiàng)目框架使用的是spring boot+mybatisplus等構(gòu)建,現(xiàn)在接口需求是通過標(biāo)簽(label)匹配相應(yīng)
的作品,這里production里存的是label的多個(gè)id集合,Mysql數(shù)據(jù)格式為json格式,存儲格式如下:

production表中l(wèi)abel字段

現(xiàn)在接口需求是通過前端傳過來的id數(shù)據(jù)進(jìn)行對label的多對多匹配。

2. 難點(diǎn)

由于是多對多匹配,所以在xml中先進(jìn)行數(shù)組轉(zhuǎn)list后對list的遍歷,然后通過MYSQL JSON函數(shù)(主要用到這兩個(gè)方法:JSON_CONTAINS(tags, '["xxx"]');和JSON_EXTRACT())

JSON_CONTAINS(tags, '["xxx"]');      查找目標(biāo)中是否包含xxx
JSON_EXTRACT(目標(biāo)json字段,"\$.name");是JSON提取函數(shù),$.name 指json數(shù)據(jù)中的key值(通過key提取目標(biāo)json中的value)
xml中針對標(biāo)簽字段多對多查詢語句

3.疑點(diǎn)

一開始是遇到這個(gè)問題:用短字符串可以匹配到數(shù)據(jù),字符串太長就沒數(shù)據(jù)。


兩次查詢結(jié)果不同,total應(yīng)該都為1的

接下來找到問題所在是因?yàn)閿?shù)據(jù)拼接的問題:


這是xml里定義的轉(zhuǎn)換后的sql語句

去掉拼接,直接加參數(shù),這樣是有數(shù)據(jù)的

解決辦法:

這里出現(xiàn)該問題的原因應(yīng)該就是這個(gè)sql拼接的問題,由于傳進(jìn)來的是遍歷過后的單值,所以這里參數(shù)就不需要加“[]”了,直接用json_contains()方法以單個(gè)字符串的形式進(jìn)行匹配。


json_contains()不傳數(shù)組類型參數(shù)

這樣就避免了json_contains()參數(shù)傳“拼接的數(shù)組”出現(xiàn)查不到數(shù)據(jù)的問題了,至于這個(gè)拼接個(gè)人后期還有待研究哪里出問題了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,060評論 5 115
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,305評論 2 89
  • 昨天突然頭暈惡心、腿腳酸軟、困得睜不開眼,就這樣還堅(jiān)持上了一天的班,下班還陪小侄子玩了一個(gè)小時(shí),昨天晚上九點(diǎn)睡下,...
    潤伊閱讀 337評論 0 0
  • "革",獸皮制衣為革,后引申為變。看卦畫,一件獸皮上衣。 "鼎"、"革"互為覆卦,一個(gè)是做飯,一個(gè)是制衣,講的就是...
    童年的流星閱讀 2,510評論 0 6

友情鏈接更多精彩內(nèi)容