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

MySQL: เรียงลำดับให้ค่าเฉพาะอยู่บนสุดด้วย ORDER BY FIELD

การใช้ 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', ...) วิธีง่ายที่สุดสำหรับเรียงลำดับตามรายการค่าที่กำหนดเอง