MySQL ไม่มี Array Type โดยตรง ใช้ VARCHAR เก็บค่าคั่นด้วย Comma แล้วใช้ FIND_IN_SET() ค้นหา
สร้างตารางและข้อมูล
mysql> CREATE TABLE FindDemo (name VARCHAR(100));
mysql> INSERT INTO FindDemo VALUES ('John'), ('Smith');
สร้าง Stored Procedure รับ "Array"
mysql> DELIMITER //
mysql> CREATE PROCEDURE SearchingStoredProcedure(IN ArrayDemo VARCHAR(100))
-> BEGIN
-> SELECT * FROM FindDemo WHERE FIND_IN_SET(name, ArrayDemo);
-> END //
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;
เรียกใช้ Procedure
mysql> CALL SearchingStoredProcedure('David,Bob,John');
ผลลัพธ์ (เจอแค่ John):
+------+ | name | +------+ | John | +------+
ข้อจำกัดและทางเลือก
| วิธี | ข้อดี | ข้อเสีย |
|---|---|---|
| FIND_IN_SET (CSV) | เข้าใจง่าย, ใช้ได้ทุก Version | ช้า, ไม่ใช้ Index, จำกัดความยาว VARCHAR |
| JSON Array (MySQL 5.7+) | Query ด้วย JSON_CONTAINS, ใช้ Index ได้ (Multi-valued Index 8.0+) | Complex กว่า |
| Temporary Table | เร็ว, JOIN ได้, ใช้ Index | ต้อง CREATE/INSERT ก่อน CALL |
แนะนำ: สำหรับ Production ให้ใช้ Temporary Table หรือ JSON แทน CSV String