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.