mysql中的find_in_set字符串查找函數(shù)解析
需求
系統(tǒng)中,不論是訂單還是退貨單,有的平臺使用需要賣家審核,有的則不需要,所以在系統(tǒng)中可以設置訂單或退貨單的流程節(jié)點。
而對于每個流程節(jié)點,客戶需求是每個節(jié)點都要根據(jù)系統(tǒng)下的員工的角色去做分發(fā),從而訂單指定到個人,而不是整個公司的員工都可以處理。
方案
對于上述場景,我實現(xiàn)的方案是在訂單表和退貨單表都增加了對應節(jié)點待處理人字段,多個人可處理的話,則用,分隔,保存對應員工的id集合。
所以,在查詢訂單的方法上我們也需要進行對應的修改,每個人只能看到自己可處理的訂單。
表內容樣例如下:
員工登錄系統(tǒng),我們可以得到其對應的id,而我們需要將其id去對應的字段查找,是否在業(yè)務審核,財務審核或發(fā)貨人的集合中。這時候,SQL該怎么改?
函數(shù)
在改SQL之前,我想的是,之前總結過MYSQL的很多函數(shù),而對于上面的實現(xiàn),MYSQL中肯定會有對應的函數(shù)幫助我們實現(xiàn)。果真,被我查到了。
1. 介紹
MySQL提供了一個名為FIND_IN_SET()的內置字符串函數(shù),允許您在逗號分隔的字符串列表中查找指定字符串的位置。
2. 語法:FIND_IN_SET(needle,haystack)
FIND_IN_SET()函數(shù)接受兩個參數(shù):
needle
是要查找的字符串。haystack
是要搜索的逗號分隔的字符串列表。
FIND_IN_SET()函數(shù)根據(jù)參數(shù)的值返回一個整數(shù)或一個NULL值:
- 如果needle或haystack為NULL,則函數(shù)返回NULL值。
- 如果needle不在haystack中,或者haystack是空字符串,則返回零。
- 如果needle在haystack中,則返回一個正整數(shù)。
3. 實戰(zhàn)
下面是項目中查編號為8910的員工可處理的待業(yè)務審核的訂單SQL:
SELECT t.id_,t.order_sn,t.create_time, t.business_employee_ids,cus.customer_title FROM wms_orders t LEFT JOIN wms_customer cus ON cus.id = t.buyer_id WHERE t.order_status != 100 AND t.comp_id = 8815 AND FIND_IN_SET( '8910', t.business_employee_ids ) AND t.order_status = 14 AND ( t.parent_order_sn IS NULL OR t.parent_order_sn = '' ) ORDER BY t.id_ DESC
結果如下:
上面結果截圖中,框出的三條訂單,id為6594,6523,6373是只有員工編號為8910能處理的,我們將上面的SQL員工編號改為8912,則此三條訂單應該是不在結果范圍內的, 從而驗證使用此函數(shù)查詢是否可行。
查詢結果如下:
結果證明查詢是沒有問題的。
插曲
前兩天,有個同事在群里發(fā)了個截圖,問了個問題,如下:
簡單描述下:
圖片地址那一列存的是我們的舊數(shù)據(jù)中心的地址,而現(xiàn)在新數(shù)據(jù)中心上線了,所以需要統(tǒng)一替換成新的地址獲取圖片。
看完后,我就想到了之前用到過MYSQL中的REPLACE()函數(shù),可以做到將字符串替換。所以,update的語句如下:
UPDATE wms_platform_wear_brand SET brand_img = REPLACE ( brand_img, "http://***/udata/interface/timer/pic/getAttachPic.do?attachId=", "wms/orderGoods.do?method=getAttachPic&attachId=" )
總結
MYSQL很強大,提供了很多內置函數(shù),從而可以幫助我們很容易就得到了我們想要的結果。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- MySQL的FIND_IN_SET函數(shù)使用方法分享
- Mysql中的find_in_set的使用方法介紹
- mysql中find_in_set()函數(shù)的使用詳解
- mysql中find_in_set()函數(shù)的使用及in()用法詳解
- mysql中find_in_set函數(shù)的基本使用方法
- MySQL中find_in_set()函數(shù)用法示例詳解
- MySQL之FIND_IN_SET()的用法及說明
- mysql查詢FIND_IN_SET?REGEXP實踐示例
- MySQL中的FIND_IN_SET函數(shù)的使用場景
- Mysql中FIND_IN_SET函數(shù)的使用及問題
相關文章
解析MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL
這篇文章主要介紹了MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL的相關資料,幫助大家更好的理解和學習MySQL8.0感興趣的朋友可以了解下2020-08-08MySQL出現(xiàn)"Lock?wait?timeout?exceeded"錯誤的原因是什么詳解
這篇文章主要給大家介紹了關于MySQL出現(xiàn)"Lock?wait?timeout?exceeded"錯誤的原因是什么的相關資料,工作中同事遇到此異常,查找解決問題時,收集整理形成此篇文章,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05MySQL:Unsafe statement written to the binary log using state
這篇文章主要介紹了MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM,需要的朋友可以參考下2016-05-05