You can use the operator FIELD
SELECT *
FROM pedidos
WHERE id IN (1,3,4,2)
ORDER BY FIELD(id, 1, 3, 4, 2)
The operator operates as follows:
FIELD() devolve a posição de um determinado valor (caso este exista) na lista delimitada por virgula.
Se id = 1, FIELD(id,3,2,1,4) devolve 3 (posição do 1 na lista)
Se id = 2, FIELD(id,3,2,1,4) devolve 2 (posição do 2 na lista)
Se id = 4, FIELD(id,3,2,1,4) devolve 4 (posição do 4 na lista)
Se id = 5 ou outro valor que não existe na lista, FIELD(id,3,2,1,4) devolve 0
Knowing this, you can use FIELD to control sorting. If you want the id records in the list (1, 3, 4, 2) to be listed at the top, just do:
SELECT *
FROM pedidos
WHERE id IN (1,3,4,2)
ORDER BY IF(FIELD(id, 1, 3, 4, 2) = 0, 1, 0), FIELD(id, 1, 3, 4, 2);
that’s right, thank you.
– Hugo Borges