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