คำสั่ง IN() ใน WHERE ไม่รับประกันลำดับผลลัพธ์ ต้องใช้ ORDER BY FIELD() เพื่อบังคับให้เรียงตามลำดับที่ระบุใน IN
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100) );
Query OK, 0 rows affected (0.64 sec)
เพิ่มข้อมูล 6 ชื่อ
mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values('Carol');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.42 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 2 | Robert | | 3 | Mike | | 4 | Sam | | 5 | Carol | | 6 | David | +----+-----------+ 6 rows in set (0.00 sec)
คำสั่ง SELECT WHERE IN พร้อม ORDER BY FIELD
mysql> select FirstName from DemoTable where Id IN(4,5,6) order by field(Id, 4, 5, 6);
ผลลัพธ์ (เรียงตาม 4, 5, 6)
+-----------+ | FirstName | +-----------+ | Sam | | Carol | | David | +-----------+ 3 rows in set (0.00 sec)
คำอธิบาย: FIELD(Id, 4, 5, 6) คืนค่าตำแหน่งของ Id ในรายการ (4→1, 5→2, 6→3) เรียงตามค่าที่ได้ จะได้ลำดับ 4, 5, 6 ตรงกับ IN clause
กรณีใช้งาน: API ที่รับรายการ ID มาจาก Frontend ต้องคืนข้อมูลเรียงตามลำดับที่ส่งมา