Siden 1 < 3 < 77 < 123
, en simpel ORDER BY id
ville være tilstrækkeligt.
Hvis du derimod ønsker at bestille på denne måde:77, 3, 123, 1
, så kunne du bruge funktionen FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Hvis din forespørgsel matcher flere rækker, end du angiver i FIELD
FIELD
returnerer 0
når en række ikke matcher nogen af de id'er, du angiver, dvs. et tal, der er mindre end de tal, der returneres for anførte id'er. Det betyder, at hvis din forespørgsel matcher flere rækker end dem, du angiver, vil disse rækker vises først. For eksempel:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
I dette eksempel er rækken med ID 400
vises først. Hvis du ønsker, at disse rækker skal vises sidst, skal du blot vende listen over ID'er om og tilføje DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC