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

Sắp xếp ORDER BY FIELD() cho truy vấn WHERE IN trong MySQL

Khi dùng WHERE id IN (...), MySQL không giữ thứ tự giá trị trong danh sách IN. Dùng ORDER BY FIELD() để sáp xết kết quả theo đúng thứ tự bạn muốn.

Cú pháp

SELECT * 
FROM ten_bang 
WHERE cot IN (gt1, gt2, ..., gtn)
ORDER BY FIELD(cot, gt1, gt2, ..., gtn);

Ví dụ minh họa

Tạo bảng SelectOrderbyField:

CREATE TABLE SelectOrderbyField (
    Id INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(30),
    Age INT,
    PRIMARY KEY (Id)
);

INSERT INTO SelectOrderbyField (Name, Age) VALUES
('John',23), ('Carol',25), ('Bob',21),
('Mike',28), ('Sam',26), ('David',23);

1. Sắp xếp theo Id theo thứ tự tùy chỉnh

SELECT * 
FROM SelectOrderbyField 
WHERE Id IN (5,1,3,2,6,4) 
ORDER BY FIELD(Id, 5,1,3,2,6,4);
+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  5 | Sam   |   26 |
|  1 | John  |   23 |
|  3 | Bob   |   21 |
|  2 | Carol |   25 |
|  6 | David |   23 |
|  4 | Mike  |   28 |
+----+-------+------+

2. Sắp xếp theo Name theo thứ tự tùy chỉnh

SELECT * 
FROM SelectOrderbyField 
WHERE Name IN ('Sam','John','Bob','Carol','David','Mike') 
ORDER BY FIELD(Name, 'Sam','John','Bob','Carol','David','Mike');
+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  5 | Sam   |   26 |
|  1 | John  |   23 |
|  3 | Bob   |   21 |
|  2 | Carol |   25 |
|  6 | David |   23 |
|  4 | Mike  |   28 |
+----+-------+------+

Lưu ý: FIELD() trả về 0 nếu giá trị không có trong danh sách – các hàng không khớp sẽ lên đầu nếu không có WHERE IN.