ใช้ FIELD() ร่วม ORDER BY ... DESC เพื่อเรียงตามลำดับที่ระบุใน IN() แบบ Descending
ตัวอย่างการใช้งาน
1. สร้างตารางตัวเลข 10-50
mysql> CREATE TABLE DemoTable (Number INT); mysql> INSERT INTO DemoTable VALUES (10), (20), (30), (40), (50);
2. เรียงตามลำดับใน IN() แบบ DESC
mysql> SELECT * FROM DemoTable
-> WHERE Number IN (40,50,20,30,10)
-> ORDER BY FIELD(Number, 40,50,20,30,10) DESC;
ผลลัพธ์
+--------+ | Number | +--------+ | 10 | | 30 | | 20 | | 50 | | 40 | +--------+
คำอธิบาย FIELD()
FIELD(str, val1, val2, ...)คืนค่าตำแหน่ง (1-based) ของ str ในรายการFIELD(10, 40,50,20,30,10)= 5 (อยู่ตำแหน่งที่ 5)ORDER BY FIELD(...) DESC→ ตำแหน่งมากสุด (5) อยู่บนสุด = ค่า 10
กรณีทั่วไป: เรียงตามลำดับ IN() แบบ ASC (ปกติ)
ORDER BY FIELD(Number, 40,50,20,30,10) ASC; -- ผล: 40, 50, 20, 30, 10
MySQL 8.0: ใช้ CASE WHEN (มาตรฐาน ANSI)
ORDER BY CASE Number
WHEN 40 THEN 1 WHEN 50 THEN 2 WHEN 20 THEN 3
WHEN 30 THEN 4 WHEN 10 THEN 5 ELSE 6 END;