Podrías hacerlo usando FIND_IN_SET , por ejemplo
SELECT * FROM T WHERE T.id IN(4,78,12,45)
ORDER BY FIND_IN_SET(T.id,'4,78,12,45');
Si bien tiene que duplicar la lista, si está generando la consulta en código, esto no es un gran problema.
Podrías hacerlo usando FIND_IN_SET , por ejemplo
SELECT * FROM T WHERE T.id IN(4,78,12,45)
ORDER BY FIND_IN_SET(T.id,'4,78,12,45');
Si bien tiene que duplicar la lista, si está generando la consulta en código, esto no es un gran problema.