การเรียงลำดับแบบกำหนดเองด้วย FIELD()
เมื่อต้องการเรียงลำดับแถวตามลำดับ ID ที่ไม่ใช่ลำดับตัวเลขหรือตัวอักษรธรรมดา เราใช้ฟังก์ชัน FIELD() ในคำสั่ง ORDER BY
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
ClientId VARCHAR(40),
ClientName VARCHAR(40)
);
Query OK, 0 rows affected (0.55 sec)
mysql> INSERT INTO DemoTable VALUES('987_John','John');
mysql> INSERT INTO DemoTable VALUES('1000_Sam','Sam');
mysql> INSERT INTO DemoTable VALUES('777_Carol','Carol');
mysql> INSERT INTO DemoTable VALUES('2000_Bob','Bob');
แสดงข้อมูลทั้งหมด (ลำดับปกติ)
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+------------+
| ClientId | ClientName |
+-----------+------------+
| 987_John | John |
| 1000_Sam | Sam |
| 777_Carol | Carol |
| 2000_Bob | Bob |
+-----------+------------+
4 rows in set (0.00 sec)
คำสั่งเรียงตามลำดับ ClientId ที่กำหนดเอง
mysql> SELECT * FROM DemoTable
ORDER BY FIELD(ClientId, '1000_Sam', '2000_Bob', '777_Carol', '987_John');
ผลลัพธ์:
+-----------+------------+
| ClientId | ClientName |
+-----------+------------+
| 1000_Sam | Sam |
| 2000_Bob | Bob |
| 777_Carol | Carol |
| 987_John | John |
+-----------+------------+
4 rows in set (0.04 sec)
คำอธิบาย
FIELD(ClientId, '1000_Sam', '2000_Bob', ...): คืนค่าตำแหน่ง (1-based) ของ ClientId ในรายการที่กำหนด- แถวที่ไม่มีในรายการจะได้ค่า 0 และจะถูกเรียงก่อน (หากต้องการให้อยู่ท้าย ให้เพิ่มเงื่อนไข)
- เหมาะสำหรับการเรียงตามลำดับความสำคัญ, สถานะ, หรือหมวดหมู่ที่กำหนดเอง