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

Cách sắp xếp dữ liệu theo thứ tự tùy chỉnh trong MySQL

Để sắp xếp dữ liệu theo một thứ tự cụ thể (không phải alphabet hay số tăng/giảm), bạn có thể sử dụng ORDER BY kết hợp với hàm IF().

Cú pháp

SELECT * FROM yourTableName
ORDER BY IF(yourColumnName = yourValue1 OR yourColumnName = yourValue2 OR yourColumnName = yourValue3,
            yourColumnName, ~yourColumnName) ASC;

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

CREATE TABLE arrangeDataInSpecificOrder (
    StudentId INT,
    StudentName VARCHAR(20)
);

INSERT INTO arrangeDataInSpecificOrder VALUES (10, 'Larry');
INSERT INTO arrangeDataInSpecificOrder VALUES (15, 'Mike');
INSERT INTO arrangeDataInSpecificOrder VALUES (100, 'Sam');
INSERT INTO arrangeDataInSpecificOrder VALUES (70, 'Carol');
INSERT INTO arrangeDataInSpecificOrder VALUES (90, 'Bob');
INSERT INTO arrangeDataInSpecificOrder VALUES (300, 'David');

Dữ liệu gốc:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 10        | Larry       |
| 15        | Mike        |
| 100       | Sam         |
| 70        | Carol       |
| 90        | Bob         |
| 300       | David       |
+-----------+-------------+

Yêu cầu: Sắp xếp so that các ID 10, 100, 300 xuất hiện trước (theo thứ tự tăng dần), các ID còn lại sau đó.

SELECT * FROM arrangeDataInSpecificOrder
ORDER BY IF(StudentId = 300 OR StudentId = 100 OR StudentId = 10,
            StudentId, ~StudentId) ASC;

Kết quả:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 10        | Larry       |
| 100       | Sam         |
| 300       | David       |
| 90        | Bob         |
| 70        | Carol       |
| 15        | Mike        |
+-----------+-------------+

Lưu ý: Toán tử ~ (bitwise NOT) giúp đảo ngược thứ tự cho các giá trị không nằm trong danh sách ưu tiên. Cách này linh hoạt cho các yêu cầu sắp xếp phức tạp.