การดึงค่าตามลำดับที่กำหนดเอง (Custom Order) ด้วย IN()
ใช้ WHERE column IN (val1, val2, val3...) ร่วมกับ ORDER BY FIELD(column, val1, val2, val3...) เพื่อ **ค้นหา** และ **จัดเรียง** ตามลำดับที่ต้องการพร้อมกัน
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> CREATE TABLE DemoTable727 (Name VARCHAR(100), Score INT);
Query OK, 0 rows affected (0.88 sec)
mysql> INSERT INTO DemoTable727 VALUES
('Chris', 45), ('Robert', 89), ('Carol', 94), ('David', 93), ('Mike', 78), ('Sam', 67);
Query OK, 6 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable727;
+--------+-------+ | Name | Score | +--------+-------+ | Chris | 45 | | Robert | 89 | | Carol | 94 | | David | 93 | | Mike | 78 | | Sam | 67 | +--------+-------+ 6 rows in set (0.00 sec)
เลือกเฉพาะ Robert, David, Sam **และ** เรียงตามลำดับนี้:
mysql> SELECT Score FROM DemoTable727
WHERE Name IN ('Robert', 'David', 'Sam')
ORDER BY FIELD(Name, 'Robert', 'David', 'Sam');
+-------+ | Score | +-------+ | 89 | | 93 | | 67 | +-------+ 3 rows in set (0.00 sec)
ฟังก์ชัน FIELD() สำหรับ Custom Order
ORDER BY FIELD(column, 'val1', 'val2', 'val3', ...)
- คืนค่าตำแหน่ง (1-based) ของค่าใน List
- ค่าที่ไม่อยู่ใน List จะได้ 0 (จะอยู่บนสุดหาก ASC)
- ใช้ได้กับ String และ Number
วิธีอื่น: CASE WHEN
ORDER BY CASE Name
WHEN 'Robert' THEN 1
WHEN 'David' THEN 2
WHEN 'Sam' THEN 3
ELSE 4 END;
กรณีใช้งานจริง
- แสดงสินค้าตาม Priority ที่กำหนด
- รายงานที่ต้องเรียงตามลำดับธุรกิจ (ไม่ใช่ Alphabetical/Numeric)
- Dashboard แสดงสถานะตามลำดับ: Critical > High > Medium > Low