ใช้ฟังก์ชัน 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) ของค่าในรายการคั่นด้วยคอมมา