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

ใช้ IF/WHEN/ELSE/OR กับ ORDER BY FIELD ใน MySQL

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1884 (Marks INT);

mysql> INSERT INTO DemoTable1884 VALUES(55), (97), (79), (87);

Query: ใช้ OR กับ ORDER BY FIELD

mysql> SELECT * FROM DemoTable1884
    WHERE Marks = 98 OR Marks = 87
    ORDER BY FIELD(Marks, 98, 87)
    LIMIT 1;

ผลลัพธ์ (มีแค่ 87, 98 ไม่มีในตาราง):

+-------+
| Marks |
+-------+
|    87 |
+-------+

ฟังก์ชัน FIELD()

FIELD(str, str1, str2, str3, ...)
-- คืนค่า Index (1-based) ของ str ใน List
-- คืนค่า 0 ถ้าไม่พบ

การทำงานของ ORDER BY FIELD

  • เรียงตามลำดับที่ระบุใน FIELD: 98 ก่อน, 87 ต่อไป
  • ค่าที่ไม่ได้ระบุใน FIELD จะได้ 0 → อยู่หน้าสุด (ถ้า ASC)
  • ร่วมกับ WHERE จำกัด Scope ให้เหลือเฉพาะค่าที่ต้องการ

ตัวอย่างเพิ่มเติม

-- เรียงสถานะตามลำดับความสำคัญ
SELECT * FROM orders
ORDER BY FIELD(status, 'urgent', 'high', 'normal', 'low');

-- ใช้กับ CASE (ยืดหยุ่นกว่า)
SELECT * FROM DemoTable1884
WHERE Marks IN (98, 87)
ORDER BY CASE Marks WHEN 98 THEN 1 WHEN 87 THEN 2 ELSE 3 END
LIMIT 1;

กรณีใช้งานจริง

  • Custom Sort Order ที่ไม่ใช่ Alphabetical/Numeric
  • Priority Queue: Urgent > High > Normal > Low
  • Status Workflow: Pending → Processing → Shipped → Delivered
  • Enum Display Order

ข้อควรระวัง

  • FIELD() คืนค่า 0 ถ้าไม่เจอ → จะอยู่บนสุดใน ASC
  • ใช้ FIELD() DESC ถ้าต้องการค่าที่ไม่เจออยู่ท้าย
  • Performance: FIELD() ไม่ใช้ Index ได้