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

เรียงลำดับใน MySQL IN() ตามลำดับที่กำหนด แบบ Descending

ใช้ 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;