บทนำ
การจัดเรียงข้อมูลโดยให้ค่าเฉพาะ (Specific Value) อยู่หน้าสุด (หรือท้ายสุด) แล้วค่อยเรียงค่าอื่นๆ ตามปกติ สามารถทำได้ด้วยเงื่อนไข Boolean ใน ORDER BY
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Number INT
-> );
Query OK, 0 rows affected (0.57 sec)
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(12);
mysql> INSERT INTO DemoTable VALUES(14);
mysql> INSERT INTO DemoTable VALUES(19);
mysql> INSERT INTO DemoTable VALUES(45);
mysql> INSERT INTO DemoTable VALUES(56);
mysql> INSERT INTO DemoTable VALUES(103);
mysql> INSERT INTO DemoTable VALUES(87);
mysql> INSERT INTO DemoTable VALUES(98);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+--------+
| Number |
+--------+
| 10 |
| 20 |
| 12 |
| 14 |
| 19 |
| 45 |
| 56 |
| 103 |
| 87 |
| 98 |
+--------+
10 rows in set (0.00 sec)
คำสั่งจัดให้ค่า 45 อยู่หน้าสุด แล้วค่อยเรียงค่าอื่นจากน้อยไปมาก
mysql> SELECT * FROM DemoTable
-> ORDER BY (Number = 45) DESC, Number;
ผลลัพธ์
+--------+
| Number |
+--------+
| 45 |
| 10 |
| 12 |
| 14 |
| 19 |
| 20 |
| 56 |
| 87 |
| 98 |
| 103 |
+--------+
10 rows in set (0.00 sec)
คำอธิบาย
(Number = 45)คืนค่า 1 (True) สำหรับแถวที่มีค่า 45, 0 (False) สำหรับอื่นๆDESCเรียง 1 (True) ก่อน 0 (False) → ค่า 45 อยู่บนสุด, Numberเรียงค่าอื่นๆ จากน้อยไปมาก (ASC เป็นค่า Default)
การประยุกต์: จัดหลายค่าเป็นลำดับพิเศษ
-- ใช้ FIELD() สำหรับหลายค่า
ORDER BY FIELD(Number, 45, 10, 100) DESC, Number
-- FIELD คืนค่าลำดับที่เจอ (1-based) หรือ 0 หากไม่เจอ
-- ค่า 45 → 1, ค่า 10 → 2, ค่า 100 → 3, อื่นๆ → 0
-- DESC จะทำให้ 3, 2, 1, 0 → 100, 10, 45, อื่นๆ
กรณีอยากให้ค่าเฉพาะอยู่ท้ายสุด
ORDER BY (Number = 45) ASC, Number
-- หรือ
ORDER BY (Number <> 45) DESC, Number