การเรียงลำดับแบบกำหนดเอง (Custom Sort) ด้วย FIELD()
เมื่อต้องการเรียงลำดับค่าที่ไม่ใช่ตัวเลขหรือตัวอักษรธรรมดา (มีสัญลักษณ์, underscore, plus) ตามลำดับที่เรากำหนด เราใช้ ORDER BY FIELD(column, val1, val2, ...)
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Title VARCHAR(100));
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable VALUES('Java_1+');
mysql> INSERT INTO DemoTable VALUES('MySQL_23+');
mysql> INSERT INTO DemoTable VALUES('MongoDB++');
mysql> INSERT INTO DemoTable VALUES('C++_23');
แสดงข้อมูลทั้งหมด (ลำดับปกติ)
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+
| Title |
+-----------+
| Java_1+ |
| MySQL_23+ |
| MongoDB++ |
| C++_23 |
+-----------+
4 rows in set (0.00 sec)
คำสั่งเรียงตามลำดับที่กำหนด
mysql> SELECT * FROM DemoTable
ORDER BY FIELD(Title, 'MySQL_23+', 'C++_23', 'Java_1+', 'MongoDB++');
ผลลัพธ์:
+-----------+
| Title |
+-----------+
| MySQL_23+ |
| C++_23 |
| Java_1+ |
| MongoDB++ |
+-----------+
4 rows in set (0.00 sec)
คำอธิบาย
FIELD(Title, 'MySQL_23+', 'C++_23', ...): คืนค่าตำแหน่ง (1,2,3,4) ตามลำดับในรายการ- MySQL จะเรียงตามตัวเลขที่ FIELD คืนมา (1 ก่อน 2 ก่อน 3 ...)
- ค่าที่ไม่อยู่ในรายการ FIELD จะได้ 0 และจะถูกเรียงก่อน (หากต้องการให้ท้าย ให้เพิ่มเงื่อนไข)
- เหมาะสำหรับการเรียงสถานะ, หมวดหมู่, หรือรหัสที่มีรูปแบบซับซ้อน