MySQL การใช้งานฟังก์ชัน FIND_IN_SET()

ฟังก์ชัน FIND_IN_SET() ใช้เพื่อค้นหาตำแหน่ง (ลำดับ) ของค่าที่กำหนด (search value) ภายในชุดข้อความที่คั่นด้วยเครื่องหมายจุลภาค (comma-separated values) โดย

  • หากพบ จะคืนค่าลำดับในตำแหน่งที่พบ (เริ่มจาก 1)
  • หากไม่พบ จะคืนค่า 0
  • หากค่าที่ค้นหาหรือชุดรายการเป็น NULL จะคืนค่า NULL

ประโยชน์ของ FIND_IN_SET()

  • ใช้กับคอลัมน์ที่เก็บค่าหลายค่าในรูปแบบ CSV เช่น tag, skills, options
  • ช่วยให้สามารถค้นหาค่าที่อยู่ในรายการได้โดยไม่ต้องใช้ LIKE '%keyword%'
  • ใช้ร่วมกับ ORDER BY เพื่อจัดลำดับตามความสำคัญที่กำหนดเอง

รูปแบบการใช้งาน

FIND_IN_SET(str, strlist)
  • str คือค่าที่ต้องการค้นหา
  • strlist คือข้อความที่เป็นรายการ (comma-separated string) เช่น 'A,B,C'
  • ค่าทั้งสองต้องเป็น string และไม่ควรมีช่องว่างเกินจำเป็น

ตัวอย่างการใช้งาน

SQL
SELECT FIND_IN_SET('B', 'A,B,C');     -- ผลลัพธ์: 2
SELECT FIND_IN_SET('D', 'A,B,C');     -- ผลลัพธ์: 0
SELECT FIND_IN_SET(NULL, 'A,B,C');    -- ผลลัพธ์: NULL
SELECT FIND_IN_SET('B', NULL);        -- ผลลัพธ์: NULL

สมมุติว่ามีการดัดแปลงตาราง film ให้มีคอลัมน์ tags (เป็น string CSV เช่น 'Action,Drama,Comedy')

SQL
-- ค้นหาภาพยนตร์ที่มี tag เป็น 'Action'
SELECT title, tags
FROM film
WHERE FIND_IN_SET('Action', tags) > 0;

ใช้เรียงลำดับภาพยนตร์ตามความสำคัญของ rating

SQL
SELECT title, rating
FROM film
ORDER BY FIND_IN_SET(rating, 'G,PG,PG-13,R,NC-17');
  • ฟังก์ชันจะคืนลำดับของค่า rating จากชุด G,PG,PG-13,...
  • ช่วยให้ ORDER BY ไม่เรียงตามตัวอักษร แต่เรียงตามลำดับที่เราต้องการ
แชร์เรื่องนี้