1 < 3 < 77 < 123
以降 、単純なORDER BY id
十分でしょう。
ただし、次の方法で注文する場合:77, 3, 123, 1
、次に関数 FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
クエリがFIELD
にリストされているよりも多くの行に一致する場合
FIELD
0
を返します 行がリストされたIDのいずれとも一致しない場合、つまり、リストされたIDに対して返される数よりも小さい数。つまり、クエリがリストした行よりも多くの行に一致する場合、それらの行が最初に表示されます。例:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
この例では、IDが400
の行 最初に表示されます。これらの行を最後に表示する場合は、IDのリストを逆にして、DESC
を追加するだけです。 :
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC