Sejak 1 < 3 < 77 < 123
, ORDER BY id
simple sederhana sudah cukup.
Namun, jika Anda ingin memesan dengan cara ini:77, 3, 123, 1
, maka Anda dapat menggunakan fungsi FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Jika kueri Anda cocok dengan lebih banyak baris daripada yang Anda cantumkan di FIELD
FIELD
mengembalikan 0
ketika sebuah baris tidak cocok dengan salah satu id yang Anda daftarkan, yaitu angka yang lebih kecil dari angka yang dikembalikan untuk id yang terdaftar. Ini berarti, jika kueri Anda cocok dengan lebih banyak baris daripada yang Anda daftarkan, baris tersebut akan muncul lebih dulu. Misalnya:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
Dalam contoh ini, baris dengan ID 400
akan muncul lebih dulu. Jika Anda ingin baris tersebut muncul terakhir, cukup balikkan daftar ID dan tambahkan DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC