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

Devolver los resultados de la consulta en un orden predefinido

No pensé que esto fuera posible, pero encontré una entrada de blog aquí que parece hacer el tipo de cosas que buscas:

SELECT id FROM table WHERE id in (7,2,5,9,8) 
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");

dará resultados diferentes a

SELECT id FROM table WHERE id in (7,2,5,9,8) 
ORDER BY FIND_IN_SET(id,"8,2,5,9,7");

FIND_IN_SET devuelve la posición de id en el segundo argumento que se le da, por lo que para el primer caso anterior, id de 7 está en la posición 1 en el conjunto, 2 en la 2 y así sucesivamente - mysql internamente funciona como

id | FIND_IN_SET
---|-----------
7  | 1
2  | 2
5  | 3

luego ordena por los resultados de FIND_IN_SET .