文章詳情頁
find_in_set - 請教 mysql查詢
瀏覽:246日期:2022-06-20 18:36:16
問題描述
mysql 表中字段option_tag 存儲的值格式(分號)為: 4:539;8:543;4:545;8:549通過 find_in_set() 可以查找到以逗號分隔的字符串。以分號分隔的 字符串 有什么函數直接能查詢到 option 含有 539的所有值?

問題解答
回答1:sql語句:SELECT * FROM tableWHERE locate(’:539;’, CONCAT(options_tag, ’;’)) > 0
用like的方法邏輯上不嚴謹,如4:2539這種情況也會被like匹配,但不是想要的結果。
從設計方案考慮,如果是復雜的數據類型,建議存成json格式,mysql高版本直接內置了json解析、查詢功能。
回答2:通過like或者正則即可。但是不建議將邏輯放在mysql中,造成數據庫引擎壓力過大,而且極度不安全。正確的做法應該是把整個字段的值取出來,作為字符串然后用語言比如php python nodejs之類的處理。
回答3:SELECT * FROM tableWHERE options_tag LIKE ’%539%’;
正如@小蟲哥哥 所說,這是設計缺陷,這看起來是一個一對多或者多對多的關系,不應該用一個字段存起來,不僅查詢效率低(在SQL里對字段進行運算有可能會使該字段的索引無法被使用),而且查詢起來也不靈活。
回答4:like 匹配
回答5:like :539
回答6:我說這是設計缺陷有人贊同嗎
回答7:like相似匹配
回答8:模糊查詢研究下
相關文章:
1. javascript - sublime快鍵鍵問題2. javascript - 移動端上不能實現拖拽布局嗎?3. boot2docker無法啟動4. python - django models 為生成的html元素添加樣式。5. javascript - react native在run-android時出現這個錯誤該怎么解決?大神賜教6. javascript - 如何判斷不同兩個對象觸發同一事件?7. 前端 - 這段代碼一直生效不了,查半天因為 top: 0px; 分號后一個隱藏的東西,也不是占位符...刪了就可以生效,這是什么情況。。8. thinkPHP5中獲取數據庫數據后默認選中下拉框的值,傳遞到后臺消失不見。有圖有代碼,希望有人幫忙9. nginx bind failed10. c++ - QWebEngineView加載url后直接點擊鏈接沒有反應要怎么解決?
排行榜

網公網安備