Để hiển thị một hàng cụ thể (ví dụ: giá trị Value = 9) lên đầu, sau đó các hàng còn lại sắp xếp giảm dần, bạn dùng ORDER BY với biểu thức boolean. Trong MySQL, biểu thức so sánh trả về 1 (TRUE) hoặc 0 (FALSE). Sắp xếp DESC sẽ đưa TRUE (1) lên trước.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (Value INT);
mysql> INSERT INTO DemoTable VALUES
(20), (8), (18), (11), (9), (19), (6), (7);
Dữ liệu gốc (theo thứ tự chèn)
mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| 20 |
| 8 |
| 18 |
| 11 |
| 9 |
| 19 |
| 6 |
| 7 |
+-------+
Truy vấn: Đưa Value = 9 lên đầu, các giá trị khác sắp xếp giảm dần
mysql> SELECT * FROM DemoTable
ORDER BY (Value = 9) DESC, Value DESC;
Kết quả
+-------+
| Value |
+-------+
| 9 |
| 20 |
| 19 |
| 18 |
| 11 |
| 8 |
| 7 |
| 6 |
+-------+
Giải thích
(Value = 9): Trả về 1 cho hàng có Value=9, 0 cho các hàng khác.ORDER BY ... DESC: 1 (TRUE) lớn hơn 0 (FALSE) -> hàng Value=9 lên đầu.Value DESC: Tiêu chí thứ 2, sắp xếp các hàng còn lại giảm dần.
Ứng dụng thực tế
- Hiển thị sản phẩm "Nổi bật" (Featured) lên đầu.
- Ưu tiên hiển thị bản ghi đang active, sau đó mới đến inactive.
- Sắp xếp tùy chỉnh phức tạp không cần
CASEdài dòng.
Kỹ thuật này tận dụng đặc tính boolean của MySQL (TRUE=1, FALSE=0) rất hiệu quả và ngắn gọn.