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

MySQL เรียงลำดับแบบกำหนดเอง (Custom Sort) ด้วย ORDER BY FIELD()

ใช้ฟังก์ชัน FIELD() ใน ORDER BY เพื่อกำหนดลำดับการแสดงผลตามค่าที่เรากำหนดเอง ไม่ใช่เรียงตามตัวอักษรหรือตัวเลข

ตัวอย่างการใช้งาน

1. สร้างตาราง

mysql> CREATE TABLE DemoTable (
    Id INT
);
Query OK, 0 rows affected (0.82 sec)

2. เพิ่มข้อมูลทดสอบ

mysql> INSERT INTO DemoTable VALUES(101);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES(103);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES(102);
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO DemoTable VALUES(105);
Query OK, 1 row affected (0.14 sec)

3. ข้อมูลก่อนเรียงลำดับ

mysql> SELECT * FROM DemoTable;
+------+
| Id   |
+------+
|  101 |
|  103 |
|  102 |
|  105 |
+------+

4. เรียงลำดับแบบกำหนดเอง: 102, 105, 101, 103

mysql> SELECT * FROM DemoTable ORDER BY FIELD(Id, 102, 105, 101, 103);

5. ผลลัพธ์

+------+
| Id   |
+------+
|  102 |
|  105 |
|  101 |
|  103 |
+------+

การทำงานของ FIELD()

  • FIELD(str, str1, str2, str3, ...) คืนค่าตำแหน่ง (index) ของ str ในรายการที่กำหนด (เริ่มจาก 1)
  • ถ้าไม่พบในรายการ จะคืนค่า 0 (จะถูกจัดลำดับมาก่อนสุดเมื่อใช้ ASC)
  • ทำงานกับทั้งตัวเลขและข้อความ

ตัวอย่างเพิ่มเติม: เรียงสถานะออเดอร์

SELECT * FROM orders
ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled');

สรุป

ORDER BY FIELD(...) เป็นวิธีง่ายและมีประสิทธิภาพสำหรับการเรียงลำดับแบบ Custom ตามลำดับที่ธุรกิจต้องการ ไม่ต้องสร้างตาราง Mapping หรือใช้ CASE WHEN ที่ซับซ้อน