Kể từ 1 < 3 < 77 < 123
, một ORDER BY id
đơn giản là đủ.
Tuy nhiên, nếu bạn muốn đặt hàng theo cách này:77, 3, 123, 1
thì bạn có thể sử dụng hàm FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Nếu truy vấn của bạn khớp với nhiều hàng hơn bạn liệt kê trong FIELD
FIELD
trả về 0
khi một hàng không khớp với bất kỳ id nào bạn liệt kê, tức là một số nhỏ hơn các số được trả về cho các id được liệt kê. Điều này có nghĩa là, nếu truy vấn của bạn khớp với nhiều hàng hơn những hàng bạn liệt kê, thì những hàng đó sẽ xuất hiện đầu tiên. Ví dụ:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
Trong ví dụ này, hàng có ID 400
sẽ xuất hiện đầu tiên. Nếu bạn muốn những hàng đó xuất hiện cuối cùng, chỉ cần đảo ngược danh sách ID và thêm DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC