ใช้ FIELD() กำหนดลำดับแสดงผลแบบ Custom
ฟังก์ชัน FIELD(str, val1, val2, ...) คืนตำแหน่งของ str ในรายการ (1-based) ใช้ใน ORDER BY เพื่อจัดลำดับตามลิสต์ที่กำหนด
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (Number INT); INSERT INTO DemoTable VALUES (1), (4), (2), (3);
ข้อมูลในตาราง
+--------+ | Number | +--------+ | 1 | | 4 | | 2 | | 3 | +--------+
คำสั่งจัดเรียงตามลำดับ: 4, 2, 1, 3
SELECT * FROM DemoTable ORDER BY FIELD(Number, 4, 2, 1, 3);
ผลลัพธ์
+--------+ | Number | +--------+ | 4 | | 2 | | 1 | | 3 | +--------+
คำอธิบาย:
FIELD(Number, 4, 2, 1, 3)คืนค่า: 4→1, 2→2, 1→3, 3→4, อื่นๆ→0ORDER BY ... ASC(Default) เรียง 1,2,3,4 → ตรงลำดับใน FIELD()- ค่าทไม่อยู่ในลิสต์ (FIELD=0) จะอยู่หน้าสุด (ถ้า ASC) หรือท้ายสุด (ถ้า DESC)
ควบคุมตำแหน่งค่าทไม่อยู่ในลิสต์:
-- ค่าทไม่อยู่ในลิสต์อยู่ท้าย (เพิ่ม 0 ใน FIELD หรือ CASE) ORDER BY FIELD(Number, 4, 2, 1, 3) DESC; -- 0 จะอยู่ท้าย -- หรือระบุชัดเจน ORDER BY CASE WHEN Number IN (4,2,1,3) THEN 0 ELSE 1 END, FIELD(Number, 4, 2, 1, 3);
ประยุกต์ใช้: จัดอันดับสถานะ: ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled')