Truy vấn MySQL ORDER BY user_id IN (1,2,3) AND name cho sắp xếp tùy chỉnh
Để triển khai IN() cho sắp xếp tùy chỉnh, hãy sử dụng ORDER BY CASE.
Hãy tạo một bảng trước:
mysql> create table DemoTable752 (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100)
);
Query OK, 0 rows affected (0.63 sec)
Chèn một số bản ghi vào bảng bằng lệnh insert:
mysql> insert into DemoTable752(Name) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable752(Name) values('Carol');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable752(Name) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable752(Name) values('Mike');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable752(Name) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable752(Name) values('Adam');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable752(Name) values('Chris');
Query OK, 1 row affected (0.26 sec)
Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select:
mysql> select * from DemoTable752;
Điều này sẽ tạo ra đầu ra sau:
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | | 4 | Mike | | 5 | Sam | | 6 | Adam | | 7 | Chris | +----+-------+ 7 rows in set (0.00 sec)
Truy vấn sau sắp xếp theo giá trị tùy chỉnh:
mysql> select * from DemoTable752 order by case when Id IN (1,2,3) then 1 else Id END, Name;
Điều này sẽ tạo ra đầu ra sau:
+----+-------+ | Id | Name | +----+-------+ | 3 | Bob | | 2 | Carol | | 1 | John | | 4 | Mike | | 5 | Sam | | 6 | Adam | | 7 | Chris | +----+-------+ 7 rows in set (0.00 sec)
Giải thích:
CASE WHEN Id IN (1,2,3) THEN 1 ELSE Id END: Các Id 1,2,3 được gán giá trị sắp xếp = 1 (nhóm ưu tiên). Các Id khác giữ nguyên giá trị Id.- Sắp xếp ASC: Nhóm ưu tiên (giá trị 1) lên đầu. Trong nhóm ưu tiên, sắp xếp phụ theo
Name(Bob, Carol, John). - Các Id 4-7 sắp xếp theo Id bình thường.