จัดเรียงค่าเฉพาะก่อน ด้วย FIELD() แล้วค่าอื่นตามปกติ
ฟังก์ชัน FIELD(str, val1, val2, ...) คืนค่าตำแหน่งของ str ในรายการ (1-based) หรือ 0 ถ้าไม่เจอ ใช้ใน ORDER BY เพื่อกำหนดลำดับพิเศษให้ค่าบางค่า
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (Value INT); INSERT INTO DemoTable VALUES (10), (70), (60), (56), (81), (85);
ข้อมูลก่อนจัดเรียง
+-------+ | Value | +-------+ | 10 | | 70 | | 60 | | 56 | | 81 | | 85 | +-------+
คำสั่งจัดเรียง: ให้ 60, 70, 81 อยู่บนสุด (DESC) แล้วค่าอื่น ASC
SELECT * FROM DemoTable ORDER BY FIELD(Value, 60, 70, 81) DESC;
ผลลัพธ์
+-------+ | Value | +-------+ | 81 | | 70 | | 60 | | 10 | | 56 | | 85 | +-------+
คำอธิบาย:
FIELD(Value, 60, 70, 81)คืนค่า: 81→3, 70→2, 60→1, อื่นๆ→0DESCเรียง 3,2,1,0 → 81, 70, 60 อยู่บนสุดตามลำดับใน FIELD()- ค่าที่ไม่ในลิสต์ (FIELD=0) จะอยู่ท้าย และเรียงตามค่าเริ่มต้น (ไม่ได้ระบุ ASC/DESC ต่อ → Default ASC)
กรณีต้องการ: ค่าพิเศษ DESC, ค่าอื่น ASC ชัดเจน
ORDER BY
CASE WHEN Value IN (60,70,81) THEN 0 ELSE 1 END, -- กลุ่มพิเศษก่อน
CASE WHEN Value IN (60,70,81) THEN Value END DESC, -- ในกลุ่มพิเศษ เรียง DESC
CASE WHEN Value NOT IN (60,70,81) THEN Value END ASC; -- กลุ่มอื่น เรียง ASC
ประยุกต์ใช้: จัดอันดับสินค้า/บทความ: Featured ก่อน, แล้วค่าอื่นตามปกติ