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

Sắp xếp theo thứ tự giá trị trong mệnh đề IN MySQL

ORDER BY FIELD(): Sắp xếp theo thứ tự tự định nghĩa trong IN

Mặc định IN (1,96,101...) không bảo đảm thứ tự kết quả. Dùng FIELD(cot, val1, val2...) trong ORDER BY để ép thứ tự chính xác theo danh sách.

Cú pháp

SELECT * FROM tenBang
WHERE cot IN (val1, val2, val3...)
ORDER BY FIELD(cot, val1, val2, val3...);

Ví dụ minh họa

Bảng SelectInDemo có StudentId: 1,10,11,15,20,101,96.

Muốn sắp xếp theo thứ tự: 1, 96, 101, 10, 15, 11, 20:

SELECT * FROM SelectInDemo
WHERE StudentId IN (1,96,101,10,15,11,20)
ORDER BY FIELD(StudentId, 1,96,101,10,15,11,20);

Kết quả

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         1 | Mike        |         23 |
|        96 | Justin      |         23 |
|       101 | David       |         27 |
|        10 | Bob         |         21 |
|        15 | Sam         |         24 |
|        11 | Carol       |         30 |
|        20 | John        |         26 |
+-----------+-------------+------------+

Thứ tự khác: 1,10,11,15,20,101,96

ORDER BY FIELD(StudentId, 1,10,11,15,20,101,96)

Kết quả sẽ theo đúng thứ tự này.

Lưu ý

  • FIELD() trả về vị trí (1-based) của giá trị trong danh sách, 0 nếu không tìm thấy.
  • Giá trị không có trong danh sách FIELD() sẽ có giá trị 0 → xuất hiện đầu tiên nếu ASC, cuối nếu DESC. Nên đảm bảo danh sách FIELD() bao phủ tất cả giá trị IN.
  • Hàm này chỉ có trong MySQL (không chuẩn SQL).

Ứng dụng

  • Hiển thị danh mục theo thứ tự ưu tiên do marketing định.
  • Sắp xếp status: 'pending', 'processing', 'shipped', 'delivered', 'cancelled'.
  • Custom sort cho báo cáo, dashboard.