Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL ordenar por alguma lista


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