共計 1700 個字符,預計需要花費 5 分鐘才能閱讀完成。
本篇內容介紹了“mysql 中的 find_in_set 字符串查找函數如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
需求
系統中,不論是訂單還是退貨單,有的平臺使用需要賣家審核,有的則不需要,所以在系統中可以設置訂單或退貨單的流程節點。
而對于每個流程節點,客戶需求是每個節點都要根據系統下的員工的角色去做分發,從而訂單指定到個人,而不是整個公司的員工都可以處理。
方案
對于上述場景,我實現的方案是在訂單表和退貨單表都增加了對應節點待處理人字段,多個人可處理的話,則用, 分隔,保存對應員工的 id 集合。
所以,在查詢訂單的方法上我們也需要進行對應的修改,每個人只能看到自己可處理的訂單。
表內容樣例如下:
員工登錄系統,我們可以得到其對應的 id,而我們需要將其 id 去對應的字段查找,是否在業務審核,財務審核或發貨人的集合中。這時候,SQL 該怎么改?
函數
在改 SQL 之前,我想的是,之前總結過 MYSQL 的很多函數,而對于上面的實現,MYSQL 中肯定會有對應的函數幫助我們實現。果真,被我查到了。
1. 介紹
MySQL 提供了一個名為 FIND_IN_SET() 的內置字符串函數,允許您在逗號分隔的字符串列表中查找指定字符串的位置。
2. 語法:FIND_IN_SET(needle,haystack)
FIND_IN_SET() 函數接受兩個參數:
needle 是要查找的字符串。
haystack 是要搜索的逗號分隔的字符串列表。
FIND_IN_SET() 函數根據參數的值返回一個整數或一個 NULL 值:
如果 needle 或 haystack 為 NULL,則函數返回 NULL 值。
如果 needle 不在 haystack 中,或者 haystack 是空字符串,則返回零。
如果 needle 在 haystack 中,則返回一個正整數。
3. 實戰
下面是項目中查編號為 8910 的員工可處理的待業務審核的訂單 SQL:
SELECT
t.id_,t.order_sn,t.create_time, t.business_employee_ids,cus.customer_title
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,則此三條訂單應該是不在結果范圍內的,從而驗證使用此函數查詢是否可行。
查詢結果如下:
結果證明查詢是沒有問題的。
插曲
前兩天,有個同事在群里發了個截圖,問了個問題,如下:
簡單描述下:
圖片地址那一列存的是我們的舊數據中心的地址,而現在新數據中心上線了,所以需要統一替換成新的地址獲取圖片。
看完后,我就想到了之前用到過 MYSQL 中的 REPLACE() 函數,可以做到將字符串替換。所以,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 中的 find_in_set 字符串查找函數如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!