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

เลือกค่าตามลำดับที่กำหนดเองจากคอลัมน์อื่นด้วย IN() ใน MySQL

การดึงค่าตามลำดับที่กำหนดเอง (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