Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ส่ง Array เข้า Stored Procedure ใน MySQL

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