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

Sắp xếp ưu tiên một giá trị cụ thể lên đầu, giữ thứ tự gốc cho phần còn lại trong MySQL

Giới thiệu

Dùng biểu thức boolean (Id = 101) trong ORDER BY để đẩy hàng có Id=101 lên đầu, các hàng khác giữ nguyên thứ tự tự nhiên.

1. Tạo bảng và dữ liệu

mysql> create table DemoTable (
    -> Id int,
    -> Name varchar(20)
    -> ); 
Query OK, 0 rows affected (0.82 sec)

mysql> insert into DemoTable values(201,'Chris Brown'); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(110,'John Doe'); 
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values(101,'Adam Smith'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(345,'Carol Taylor'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(135,'John Smith'); 
Query OK, 1 row affected (0.11 sec)

2. Dữ liệu gốc (theo thứ tự chèn)

mysql> select *from DemoTable;
+------+--------------+
| Id   | Name         |
+------+--------------+
|  201 | Chris Brown  |
|  110 | John Doe     |
|  101 | Adam Smith   |
|  345 | Carol Taylor |
|  135 | John Smith   |
+------+--------------+
5 rows in set (0.00 sec)

3. Đẩy Id=101 lên đầu

mysql> select *from DemoTable 
    -> order by (Id=101) desc;

Cơ chế:

  • (Id=101) trả về 1 (TRUE) cho hàng Id=101, 0 (FALSE) cho các hàng khác
  • DESC: 1 > 0 → hàng TRUE lên đầu
  • Các hàng FALSE (0) giữ thứ tự tương đối (stable sort trong MySQL)

4. Kết quả

+------+--------------+
| Id   | Name         |
+------+--------------+
|  101 | Adam Smith   |
|  201 | Chris Brown  |
|  110 | John Doe     |
|  345 | Carol Taylor |
|  135 | John Smith   |
+------+--------------+
5 rows in set (0.00 sec)

Mở rộng: Ưu tiên nhiều giá trị theo thứ tự

ORDER BY (Id=101) DESC, (Id=110) DESC, (Id=201) DESC

Hoặc dùng FIELD():

ORDER BY FIELD(Id, 101, 110, 201) DESC  -- FIELD trả về vị trí, 0 nếu không có

Ứng dụng: Hiển thị sản phẩm nổi bật, pinned post, tài khoản VIP lên đầu danh sách.