Sedan 1 < 3 < 77 < 123
, en enkel ORDER BY id
skulle räcka.
Om du däremot vill beställa på detta sätt:77, 3, 123, 1
, då kan du använda funktionen FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Om din fråga matchar fler rader än du listar i FIELD
FIELD
returnerar 0
när en rad inte stämmer överens med något av ID:n du listar, det vill säga ett nummer som är mindre än siffrorna som returneras för listade ID. Det betyder att om din fråga matchar fler rader än de du listar, kommer dessa rader att visas först. Till exempel:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
I det här exemplet, raden med ID 400
visas först. Om du vill att dessa rader ska visas sist, vänd helt enkelt på listan med ID:n och lägg till DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC