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

ส่ง Array ให้ WHERE Clause ใน MySQL ด้วย IN

ใช้ WHERE column IN (value1, value2, ...) เพื่อส่งหลายค่าเข้าไปใน Query

สร้างตารางและข้อมูล

mysql> CREATE TABLE PassingAnArrayDemo (id INT, Firstname VARCHAR(100));
mysql> INSERT INTO PassingAnArrayDemo VALUES 
    -> (1,'John'),(2,'Carol'),(3,'Smith'),(4,'Bob'),(5,'Johnson'),(6,'David'),(7,'Sam'),(8,'Jessica');

Query ด้วย IN

mysql> SELECT * FROM PassingAnArrayDemo WHERE id IN (1, 3, 6);

ผลลัพธ์:

+------+-----------+
| id   | Firstname |
+------+-----------+
| 1    | John      |
| 3    | Smith     |
| 6    | David     |
+------+-----------+

ใช้กับ String (ต้องมี Quote)

SELECT * FROM PassingAnArrayDemo WHERE Firstname IN ('John', 'Bob', 'Sam');

ข้อจำกัดและแนวทาง

  • จำนวนค่าใน IN: MySQL ไม่มี Hard Limit แต่ Query ใหญ่เกิน max_allowed_packet จะ Error
  • Performance: IN (..., ..., ...) หลายพันค่า → ช้า ควรใช้ Temporary Table หรือ JOIN แทน
  • Prepared Statement: ไม่สามารถ Bind Array เข้า IN ได้โดยตรง ต้องสร้าง Placeholders แบบ Dynamic
แนวทาง Production: สร้าง Temporary Table โหลดค่า Array เข้าไป แล้ว JOIN กับตารางหลัก → เร็วกว่า, Index ได้, Parameterize ได้