ฟังก์ชัน FIND_IN_SET และ IN ในภาษา MySQL
ผมมีฐานข้อมูล หน้าตาดังนี้
ก่อนอื่น ทำความรู้จักฟังก์ชัน IN กันก่อนครับ
ผมทดลองใช้งานฟังก์ชัน IN โดยเขียนโค้ดแบบนี้
SELECT team.name, team.position, team.score FROM team WHERE team.position IN (1,2,6)ผลลัพธ์จะได้ดังนี้
หรือถ้าเขียนแบบนี้
SELECT team.name, team.position, team.score FROM team WHERE team.name IN ('Arsenal','Man City')ผลลัพธ์จะได้
ข้อสังเกตุนะครับ IN (1,2,6) เราส่งพารามิเตอร์ไปเป็น Set เท่านั้น
ถ้าเขียน IN ('1,2,6') มันจะถึงว่ามีพารามิเตอร์แค่ 1 ตัว และมันจะ ดึงเอาแค่เลข 1 ไปเช็คครับ
ตัวอย่าง
SELECT team.name, team.position, team.score FROM team WHERE team.position IN ('1,2,6')ผลลัพธ์จะได้
จะเห็นว่า IN('1,2,6') มันเหมือนกับเราเขียน IN (1) เลย
เอาละครับ มาถึงปัญหาของ IN คือ หากเรามีข้อมูลที่เป็น String เช่น '1,2,6' เราไม่สามารถจะส่ง String นี้เข้าไปในฟังก์ชัน IN ได้ตรงๆ
เช่น IN ('1,2,6') แบบนี้มันจะทำให้ผลลัพธ์ไม่ตรงกับที่เราคาดหวังไว้
ดังนั้น เราก็ใช้ฟังก์ชัน FIND_IN_SET แทนครับ
FIND_IN_SET(team.position, '1,2,6') แทนได้
ตัวอย่าง
SELECT team.name, team.position, team.score FROM team WHERE FIND_IN_SET(team.position,'1,2,6')
ผลลัพธ์จะได้
สรุป
team.position IN (1,2,6) มีค่าเท่ากับ FIND_IN_SET(team.position,'1,2,6')
นั่นเองครับ ทั้งนี้ขึ้นอยู่กับความเหมาะสมในการใช้งานนะครับ