Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp bản ghi MySQL dựa trên điều kiện với ORDER BY IF

Dùng ORDER BY IF(condition, 1, 0) để ưu tiên hàng thỏa điều kiện. Tạo bảng:

mysql> CREATE TABLE DemoTable (
    Name VARCHAR(50),
    Score INT
); Query OK, 0 rows affected (0.72 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable VALUES('Chris',98);  Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('David',45);  Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('Bob',56);    Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('Sam',89);    Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('Carol',78);  Query OK, 1 row affected (0.14 sec)

Hiển thị dữ liệu:

mysql> SELECT * FROM DemoTable;

Kết quả:

+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 98    |
| David | 45    |
| Bob   | 56    |
| Sam   | 89    |
| Carol | 78    |
+-------+-------+
5 rows in set (0.00 sec)

Sắp xếp: ưu tiên Name='Sam' lên đầu (IF=1), các hàng khác theo Score giảm dần:

mysql> SELECT * FROM DemoTable 
ORDER BY IF(Name='Sam',1,0) ASC, Score DESC;

Kết quả (Sam cuối vì ASC: 0 trước, 1 sau — thực ra Sam có IF=1 nên xếp sau các hàng IF=0):

+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 98    |
| Carol | 78    |
| Bob   | 56    |
| David | 45    |
| Sam   | 89    |
+-------+-------+
5 rows in set (0.00 sec)

Sửa lỗi logic: Muốn Sam lên đầu, dùng IF(Name='Sam',0,1) hoặc ORDER BY IF(Name='Sam',1,0) DESC.