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

เรียงลำดับผลลัพธ์ MySQL ให้ตรงกับลำดับใน IN Clause ด้วย ORDER BY FIELD

คำสั่ง 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 ต้องคืนข้อมูลเรียงตามลำดับที่ส่งมา