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

จัดเรียงตามสตริงเฉพาะใน MySQL (Custom Order)

ใช้ ORDER BY CASE WHEN ... THEN 0 ELSE 1 END เพื่อจัดให้ค่าที่ต้องการอยู่บนสุด

ตัวอย่าง: เรียงให้ชื่อขึ้นต้นด้วย "Jo" อยู่บนสุด

1. สร้างตารางและข้อมูล

mysql> create table DemoTable (FirstName varchar(100));
mysql> insert into DemoTable values('John'), ('Adam'), ('Sam'), ('Johnny'), ('Joy'), ('Jace');

2. Query เรียง Custom

mysql> SELECT * FROM DemoTable 
    -> ORDER BY CASE WHEN SUBSTRING(FirstName, 1, 2) = 'Jo' THEN 0 ELSE 1 END;

ผลลัพธ์

+-----------+
| FirstName |
+-----------+
| John      |
| Johnny    |
| Joy       |
| Adam      |
| Sam       |
| Jace      |
+-----------+

รูปแบบ ORDER BY CASE อื่นๆ

หลายระดับความสำคัญ

ORDER BY CASE 
    WHEN FirstName LIKE 'Jo%' THEN 1
    WHEN FirstName LIKE 'Ja%' THEN 2
    WHEN FirstName LIKE 'A%'  THEN 3
    ELSE 4
END;

ใช้ FIELD() สำหรับรายการคงที่ (MySQL)

ORDER BY FIELD(FirstName, 'John', 'Johnny', 'Joy', 'Adam', 'Sam', 'Jace');

MySQL 8.0: ใช้ CTE กำหนดลำดับ

WITH ordered AS (
    SELECT *, 
    CASE WHEN FirstName LIKE 'Jo%' THEN 1 ELSE 2 END AS sort_order
    FROM DemoTable
)
SELECT * FROM ordered ORDER BY sort_order, FirstName;