Desde
1 < 3 < 77 < 123
, um simples ORDER BY id
bastaria. Se, no entanto, você quiser fazer o pedido desta forma:
77, 3, 123, 1
, então você pode usar a função FIELD()
:SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Se sua consulta corresponder a mais linhas do que você lista em
FIELD
FIELD
retorna 0
quando uma linha não corresponde a nenhum dos IDs listados, ou seja, um número menor que os números retornados para os IDs listados. Isso significa que, se sua consulta corresponder a mais linhas do que as listadas, essas linhas aparecerão primeiro. Por exemplo:SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
Neste exemplo, a linha com ID
400
aparecerá primeiro. Se você quiser que essas linhas apareçam por último, basta inverter a lista de IDs e adicionar DESC
:SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC