首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL FIND_IN_SET 函數詳解:逗號分隔字串查詢利器

     編輯:MySQL 綜合教學

MySQL FIND_IN_SET 函數詳解:逗號分隔字串查詢利器

FIND_IN_SET 是 MySQL 提供的實用字串函數,專門用於判斷某字串是否存在於「以逗號分隔的字串列表」中。它在處理標籤系統、權限控制、多值欄位查詢等場景時非常高效。

基本語法

FIND_IN_SET(str, strlist)
  • str:要查找的字串
  • strlist:以逗號分隔的字串列表(如 'a,b,c')
  • 回傳值:找到時回傳位置索引(從 1 開始),找不到回傳 0,任一參數為 NULL 時回傳 NULL

實戰範例

假設有一張記錄使用者群組關係的表,openid 欄位儲存逗號分隔的使用者 ID 列表。我們要找出特定使用者(user_uuid)所屬的所有群組並統計人數:

SELECT t.group_id, COUNT(group_id) AS tsum
FROM (
    SELECT group_id
    FROM xx
    WHERE FIND_IN_SET(openid, 'qqqwqnfocFq5IL2sXB2Qu0I,oarwerrr-2KRah_TklJEomljhlKg,oaSiouEgtr5t5utLFU8-evmkn5BwQ3_c')
      AND user_uuid = 'xxxxxxxxxxxx'
) t
GROUP BY group_id;

關鍵特性與注意事項

  • 精確匹配:FIND_IN_SET('a', 'a,b,ab') 回傳 1,不會誤匹配 'ab'
  • 大小寫不敏感:預設不區分大小寫
  • 效能考量:無法使用索引,大資料量時建議正規化設計(建立關聯表)
  • 適用場景:標籤過濾、權限位元組、簡易多值欄位查詢

對比:FIND_IN_SET vs LIKE vs IN

函數/運算子適用場景索引支援精確度
FIND_IN_SET逗號分隔字串精確查找無高(精確匹配)
LIKE '%val%'模糊查詢無(前導 %)低(易誤匹配)
IN離散值集合查詢有高

善用 FIND_IN_SET 可避免 LIKE 的模糊匹配陷阱,但在高頻查詢大量資料時,建議將資料結構正規化為關聯表以獲得最佳效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved