首頁  >  文章  >  資料庫  >  mysql中的find_in_set字串查找函數解析

mysql中的find_in_set字串查找函數解析

WBOY
WBOY轉載
2022-08-29 11:45:302364瀏覽

推薦學習:mysql影片教學

#需求

系統中,不論是訂單還是退貨單,有的平台使用需要賣家審核,有的則不需要,所以在系統中可以設定訂單或退貨單的流程節點。

而對於每個流程節點,客戶需求是每個節點都要根據系統下的員工的角色去做分發,從而訂單指定到個人,而不是整個公司的員工都可以處理。

方案

對於上述場景,我實現的方案是在訂單表和退貨單表都增加了對應節點待處理人字段,多個人可處理的話,則用,分隔,保存對應員工的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
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,則此三條訂單應該是不在結果範圍內的, 從而驗證使用此函數查詢是否可行。

查詢結果如下:

結果證明查詢是沒有問題的。

插曲

前兩天,有個同事在群組裡發了個截圖,問了個問題,如下:

#簡單描述下:

圖片地址那一列存的是我們的舊資料中心的地址,而現在新資料中心上線了,所以需要統一替換成新的地址獲取圖片。

看完後,我想到了之前用過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影片教學

以上是mysql中的find_in_set字串查找函數解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除