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

การ SELECT แถวใน MySQL ให้เรียงตามลำดับใน IN Clause

ใช้ฟังก์ชัน FIND_IN_SET() ใน ORDER BY เพื่อให้ผลลัพธ์เรียงตามลำดับที่ระบุใน IN clause

ไวยากรณ์

SELECT yourAlias.* FROM yourTableName yourAlias 
WHERE yourAlias.yourColumnName IN(value1,value2,...N) 
ORDER BY FIND_IN_SET(yourAlias.yourColumnName, 'value1,value2,...N');

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table InDemo (
    -> CodeId int,
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (0.95 sec)

เพิ่มข้อมูล:

mysql> insert into InDemo values(1,'John');
mysql> insert into InDemo values(2,'Carol');
mysql> insert into InDemo values(3,'Sam');
mysql> insert into InDemo values(4,'Bob');

ข้อมูล:

+--------+-------+
| CodeId | Name  |
+--------+-------+
|      1 | John  |
|      2 | Carol |
|      3 | Sam   |
|      4 | Bob   |
+--------+-------+

คิวรี่เรียงตามลำดับ 1,3,2,4:

mysql> select tbl.* from InDemo tbl 
    -> where tbl.CodeId in(1,3,2,4) 
    -> ORDER BY FIND_IN_SET(tbl.CodeId, '1,3,2,4');

ผลลัพธ์ (เรียง 1,3,2,4 ไม่ใช่ 1,2,3,4):

+--------+-------+
| CodeId | Name  |
+--------+-------+
|      1 | John  |
|      3 | Sam   |
|      2 | Carol |
|      4 | Bob   |
+--------+-------+

หมายเหตุ: FIND_IN_SET() คืนค่าตำแหน่ง (1-based) ของค่าในรายการคั่นด้วยคอมมา