国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql 逗號(hào)分隔的字段查詢

在工作中,經(jīng)常會(huì)遇到一對(duì)多的關(guān)系,比如用戶和愛(ài)好。

想要在 Mysql 中保存這種關(guān)系,一般有兩種方式:


文章來(lái)源地址http://www.zghlxwxcb.cn/article/210.html

第一種是建立一張用戶愛(ài)好 user_hobby(user_id, hobby_id),這樣一條user_id就會(huì)存在多條記錄。

第二種方式,直接在用戶表中增加 hobby_ids 字段,將hobby_id拼接成用逗號(hào)分隔的字符串保存起來(lái)。


那么問(wèn)題來(lái)了,如果采用第二種方式的話,查詢的時(shí)候要如何處理呢?下面介紹幾種常見(jiàn)的處理方式。


一、like

可能最新想到的是采用like的形式,如下:

select * from user where hobby_ids like '%1%';

這種方式是否可行呢? 行,但是有適用范圍,如果hobby_id在10以內(nèi),那么這么處理完全是可以的,但是一旦超過(guò)了10,那'%1%'就會(huì)把10,11,這些帶1的id全都匹配處理。

二、find_in_set

為了解決like存在的問(wèn)題,還可以使用mysql提供的find_in_set(str, strlist),sql可以這樣寫(xiě):

select * from user where find_in_set('1', hobby_ids);

這樣mysql就會(huì)把hobby_ids的值,按照逗號(hào)分隔的一個(gè)個(gè)元素去匹配。如果我們要匹配多個(gè)值要怎么辦呢,比如查找喜歡1-籃球或2-足球的用戶,可以

select * from user where find_in_set('1', hobby_ids) or find_in_set('2', hobby_ids);

如果匹配的值較多,我們可能要拼很長(zhǎng)的sql,那有沒(méi)有稍微簡(jiǎn)短的方式呢,我們可以采用下面的方式。

三、regexp

regexp是mysql提供的強(qiáng)大的正則匹配方式。上面的sql就可以改寫(xiě)成:

select * from user where hobby_ids regexp '(^|,)(1|2)(,|$)';

這里是完全采用字符串正則匹配的方式,(1|2)表示匹配1或者2,(^|,)表示數(shù)字前面必須是字符串開(kāi)頭或者是一個(gè)逗號(hào),(,|$)表示數(shù)字后面必須是逗號(hào)或者字符串的結(jié)尾。這樣就可以完整匹配逗號(hào)分隔的元素了。




到此這篇關(guān)于Mysql 逗號(hào)分隔的字段查詢的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/210.html

如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系站長(zhǎng)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包