find_in_set - 請(qǐng)教 mysql查詢
問題描述
mysql 表中字段option_tag 存儲(chǔ)的值格式(分號(hào))為: 4:539;8:543;4:545;8:549通過 find_in_set() 可以查找到以逗號(hào)分隔的字符串。以分號(hào)分隔的 字符串 有什么函數(shù)直接能查詢到 option 含有 539的所有值?
問題解答
回答1:sql語句:SELECT * FROM tableWHERE locate(’:539;’, CONCAT(options_tag, ’;’)) > 0
用like的方法邏輯上不嚴(yán)謹(jǐn),如4:2539這種情況也會(huì)被like匹配,但不是想要的結(jié)果。
從設(shè)計(jì)方案考慮,如果是復(fù)雜的數(shù)據(jù)類型,建議存成json格式,mysql高版本直接內(nèi)置了json解析、查詢功能。
回答2:通過like或者正則即可。但是不建議將邏輯放在mysql中,造成數(shù)據(jù)庫(kù)引擎壓力過大,而且極度不安全。正確的做法應(yīng)該是把整個(gè)字段的值取出來,作為字符串然后用語言比如php python nodejs之類的處理。
回答3:SELECT * FROM tableWHERE options_tag LIKE ’%539%’;
正如@小蟲哥哥 所說,這是設(shè)計(jì)缺陷,這看起來是一個(gè)一對(duì)多或者多對(duì)多的關(guān)系,不應(yīng)該用一個(gè)字段存起來,不僅查詢效率低(在SQL里對(duì)字段進(jìn)行運(yùn)算有可能會(huì)使該字段的索引無法被使用),而且查詢起來也不靈活。
回答4:like 匹配
回答5:like :539
回答6:我說這是設(shè)計(jì)缺陷有人贊同嗎
回答7:like相似匹配
回答8:模糊查詢研究下
相關(guān)文章:
1. java固定鍵值轉(zhuǎn)換,使用枚舉實(shí)現(xiàn)字典?2. php自學(xué)從哪里開始?3. java - 我設(shè)置了cookie的max age,但是cookie依然在關(guān)閉游覽器后消失了4. MySQL客戶端吃掉了SQL注解?5. python小白的基礎(chǔ)問題 關(guān)于while循環(huán)的嵌套6. css3 - [CSS] 動(dòng)畫效果 3D翻轉(zhuǎn)bug7. javascript - JS設(shè)置Video視頻對(duì)象的currentTime時(shí)出現(xiàn)了問題,IE,Edge,火狐,都可以設(shè)置,反而chrom卻...8. 求大神幫我看看是哪里寫錯(cuò)了 感謝細(xì)心解答9. phpstady在win10上運(yùn)行10. javascript - 百度echarts series數(shù)據(jù)更新問題
