ใช้ฟังก์ชัน FIELD() ใน ORDER BY เพื่อกำหนดลำดับการแสดงผลตามค่าที่เรากำหนดเอง ไม่ใช่เรียงตามตัวอักษรหรือตัวเลข
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
Id INT
);
Query OK, 0 rows affected (0.82 sec)
2. เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO DemoTable VALUES(101); Query OK, 1 row affected (0.23 sec) mysql> INSERT INTO DemoTable VALUES(103); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable VALUES(102); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO DemoTable VALUES(105); Query OK, 1 row affected (0.14 sec)
3. ข้อมูลก่อนเรียงลำดับ
mysql> SELECT * FROM DemoTable; +------+ | Id | +------+ | 101 | | 103 | | 102 | | 105 | +------+
4. เรียงลำดับแบบกำหนดเอง: 102, 105, 101, 103
mysql> SELECT * FROM DemoTable ORDER BY FIELD(Id, 102, 105, 101, 103);
5. ผลลัพธ์
+------+ | Id | +------+ | 102 | | 105 | | 101 | | 103 | +------+
การทำงานของ FIELD()
FIELD(str, str1, str2, str3, ...)คืนค่าตำแหน่ง (index) ของstrในรายการที่กำหนด (เริ่มจาก 1)- ถ้าไม่พบในรายการ จะคืนค่า 0 (จะถูกจัดลำดับมาก่อนสุดเมื่อใช้ ASC)
- ทำงานกับทั้งตัวเลขและข้อความ
ตัวอย่างเพิ่มเติม: เรียงสถานะออเดอร์
SELECT * FROM orders ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled');
สรุป
ORDER BY FIELD(...) เป็นวิธีง่ายและมีประสิทธิภาพสำหรับการเรียงลำดับแบบ Custom ตามลำดับที่ธุรกิจต้องการ ไม่ต้องสร้างตาราง Mapping หรือใช้ CASE WHEN ที่ซับซ้อน