sql >> Base de Datos >  >> RDS >> Mysql

MySQL ordenar por alguna lista

Desde 1 < 3 < 77 < 123 , un simple ORDER BY id sería suficiente.

Sin embargo, si desea ordenar de esta manera:77, 3, 123, 1 , entonces podría usar la función FIELD() :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
ORDER BY FIELD(id, 77, 3, 123, 1)

Si su consulta coincide con más filas de las que enumera en FIELD

FIELD devuelve 0 cuando una fila no coincide con ninguna de las identificaciones que enumera, es decir, un número más pequeño que los números devueltos para las identificaciones enumeradas. Esto significa que, si su consulta coincide con más filas de las que enumera, esas filas aparecerán primero. Por ejemplo:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 77, 3, 123, 1)

En este ejemplo, la fila con ID 400 aparecerá primero. Si desea que esas filas aparezcan en último lugar, simplemente invierta la lista de ID y agregue DESC :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 1, 123, 3, 77) DESC