การจัดเรียงแบบกำหนดเอง (Custom Sort) ใน MySQL ด้วย FIELD()
ฟังก์ชัน FIELD(str, val1, val2, ...) คืนค่าตำแหน่งของ str ในรายการ (1-based) ค่าที่ไม่อยู่ในรายการ = 0 | ใช้ใน ORDER BY เพื่อกำหนดลำดับเฉพาะ
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> create table DemoTable (StudentId int); mysql> insert into DemoTable values(100); mysql> insert into DemoTable values(110); mysql> insert into DemoTable values(90); mysql> insert into DemoTable values(70); mysql> insert into DemoTable values(120); mysql> insert into DemoTable values(140);
ข้อมูลต้นฉบับ:
+-----------+ | StudentId | +-----------+ | 100 | | 110 | | 90 | | 70 | | 120 | | 140 | +-----------+
คิวรีจัดเรียงตามลำดับที่กำหนด: 100, 70, 140, 90, 120, 110
mysql> select * from DemoTable order by field(StudentId, '100', '70', '140', '90', '120', '110');
+-----------+ | StudentId | +-----------+ | 100 | | 70 | | 140 | | 90 | | 120 | | 110 | +-----------+
เทียบกับ IF():
FIELD()- ระบุลำดับได้หลายค่า สะดวก อ่านง่ายIF()- เหมาะสำหรับ 2-3 ระดับ優先 (Priority)CASE WHEN- ยืดหยุ่นที่สุด สำหรับ Logic ซับซ้อน
ข้อควรระวัง: FIELD() เปรียบเทียบเป็น String | หากคอลัมน์เป็น Number ให้ Cast: FIELD(CAST(StudentId AS CHAR), ...) หรือเขียนตัวเลขไม่ Quote ก็ได้ (MySQL จะแปลงอัตโนมัติ)