การใช้ FIELD() สำหรับ Custom Sorting
ฟังก์ชัน FIELD(str, val1, val2, val3, ...) คืนค่าตำแหน่งของ str ในรายการ (1-based) ใช้ใน ORDER BY เพื่อกำหนดลำดับที่ต้องการ
ตัวอย่าง
mysql> create table DemoTable849(Color varchar(100));
Query OK, 0 rows affected (0.56 sec)
mysql> insert into DemoTable849 values('RED');
mysql> insert into DemoTable849 values('ORANGE');
mysql> insert into DemoTable849 values('BLUE');
mysql> insert into DemoTable849 values('GREEN');
เรียงตามลำดับ: RED, GREEN, BLUE, ORANGE
mysql> select * from DemoTable849
order by field(Color, 'RED', 'GREEN', 'BLUE', 'ORANGE');
ผลลัพธ์:
+--------+
| Color |
+--------+
| RED |
| GREEN |
| BLUE |
| ORANGE |
+--------+
การทำงานของ FIELD()
- คืนค่า 1 ถ้า Color = 'RED'
- คืนค่า 2 ถ้า Color = 'GREEN'
- คืนค่า 3 ถ้า Color = 'BLUE'
- คืนค่า 4 ถ้า Color = 'ORANGE'
- คืนค่า 0 ถ้าไม่ตรงค่าไหนในรายการ (จะอยู่บนสุดถ้า ASC)
เทคนิค: ให้ค่าที่ไม่ได้ระบุลงท้าย
ORDER BY CASE WHEN FIELD(Color, 'RED','GREEN','BLUE','ORANGE') = 0 THEN 1 ELSE 0 END,
FIELD(Color, 'RED','GREEN','BLUE','ORANGE')
สรุป
ORDER BY FIELD(col, 'val1', 'val2', ...) วิธีง่ายที่สุดสำหรับเรียงลำดับตามรายการค่าที่กำหนดเอง