mysql如何匹配數(shù)組字段中的某一個(gè)具體值
應(yīng)用背景
業(yè)務(wù)表中的某個(gè)字段存儲(chǔ)的值為數(shù)組,例如 1,2,3 。
現(xiàn)在需要查詢其中一個(gè)值是數(shù)組里面的對(duì)應(yīng)的一個(gè)值,該如何匹配。

就比如subject這個(gè)字段為一個(gè)數(shù)組,現(xiàn)在需要查詢subject包含1的學(xué)生。
使用模糊查詢的問(wèn)題
因?yàn)閟ubject里面存的不是具體的一個(gè)值,所以使用=顯然是不行的,這個(gè)時(shí)候大家首先會(huì)想到like的模糊查詢,我們一起來(lái)看看效果
SELECT * FROM `stu_c` WHERE subject LIKE '%1%'
執(zhí)行結(jié)果

可以看到將張三跟王五都查出來(lái)了,這顯然跟我們的需求不符,需求是只包含1的,應(yīng)該只查出來(lái)張三這條數(shù)據(jù)才對(duì)。
解決方案一
使用mysql中的FIND_IN_SET(str,fieldName)函數(shù),str是要查詢的字符串,fieldName是字段名,參數(shù)以“,”分隔,例如1,2,3
匹配單個(gè)(只包含1)sql語(yǔ)句如下
SELECT * FROM stu_c WHERE FIND_IN_SET('1', subject) > 0 匹配單個(gè)(只包含1)執(zhí)行結(jié)果

查出了subject包含1的學(xué)生信息
匹配多個(gè)(包含1跟3)sql語(yǔ)句如下
SELECT * FROM stu_c
WHERE FIND_IN_SET('1', subject) > 0 OR FIND_IN_SET('3', subject) > 0;匹配多個(gè)(包含1跟3)執(zhí)行結(jié)果

查出了subject包含1跟3的學(xué)生信息
解決方案二
使用REGEXP正則表達(dá)式匹配,REGEXP語(yǔ)法更加強(qiáng)大,功能更全,可以根據(jù)不同的需求選擇不同的用法,本文主要講查詢包含這個(gè)字符的數(shù)據(jù)
匹配單個(gè)(只包含1)sql語(yǔ)句如下
SELECT * FROM `stu_c` WHERE CONCAT ( ',', subject, ',' ) REGEXP ',(1),'
匹配單個(gè)(只包含1)執(zhí)行結(jié)果

查出了subject包含1的學(xué)生信息
匹配多個(gè)(包含1跟3)sql語(yǔ)句如下
SELECT * FROM `stu_c` WHERE CONCAT ( ',', subject, ',' ) REGEXP ',(1|3),'
匹配多個(gè)(包含1跟3)執(zhí)行結(jié)果

查出了subject包含1跟3的學(xué)生信息
總結(jié)
兩種方式都能解決匹配數(shù)組字段中某一個(gè)具體值的問(wèn)題,但是也有差異,有各自的優(yōu)缺點(diǎn),例如FIND_IN_SET(str,fieldName)函數(shù),如果前端頁(yè)面是多選項(xiàng),也就是需要匹配滿足多個(gè)值的情況,就需要使用or拼接sql,但是REGEXP只需要把參數(shù)轉(zhuǎn)換為我們需要的格式(',(1|3),')即可。
如果項(xiàng)目需求只需匹配一個(gè)值,F(xiàn)IND_IN_SET函數(shù)直接在xml中使用就行,REGEXP仍需要將單個(gè)參數(shù)轉(zhuǎn)換為特定的格式(,(1),)。
綜上所述,單個(gè)值匹配建議用FIND_IN_SET函數(shù),多個(gè)值匹配建議用REGEXP正則表達(dá)式。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL binlog_ignore_db 參數(shù)的具體使用
這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-12-12
MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理
MySQL數(shù)據(jù)庫(kù)通常包含關(guān)鍵的數(shù)據(jù),為確保這些數(shù)據(jù)的安全和完整,需要利用訪問(wèn)控制和用戶管理的功能,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理的相關(guān)資料,需要的朋友可以參考下2022-05-05
MySQL5.7.27-winx64版本win10下載安裝教程圖解
這篇文章主要介紹了MySQL5.7.27-winx64版本win10下載安裝教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
mysql啟動(dòng)服務(wù)報(bào)1058錯(cuò)誤的解決方法
這篇文章主要介紹了mysql啟動(dòng)服務(wù)報(bào)1058錯(cuò)誤的解決方法,需要的朋友可以參考下2014-03-03
教你自動(dòng)恢復(fù)MySQL數(shù)據(jù)庫(kù)的日志文件(binlog)
如果MySQL服務(wù)器啟用了二進(jìn)制日志,你可以使用mysqlbinlog工具來(lái)恢復(fù)從指定的時(shí)間點(diǎn)開(kāi)始2014-05-05
mybatis 實(shí)現(xiàn) SQL 查詢攔截修改詳解
這篇文章主要介紹了mybatis 實(shí)現(xiàn) SQL 查詢攔截修改詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
MySQL skip-character-set-client-handshake導(dǎo)致的一個(gè)字符集問(wèn)題
這篇文章主要介紹了MySQL skip-character-set-client-handshake導(dǎo)致的一個(gè)字符集問(wèn)題,需要的朋友可以參考下2014-07-07

