Algunas veces (por suerte no es frecuente) es necesario ordenar de manera explícita en MySQL, se necesita darle una lista de valores que será el orden y no necesariamente por los valores de un campo; por ejemplo puede ser una lista arbitraria de ID's
Para lograr esto me he encontrado con lo siguiente: http://www.bin-co.com/database/mysql/explict_order_by.php
Básicamente lo que explica es que para ordenar de manera explícita, se escriben los valores explícitamente de la forma:
columna1=valor1 DESC, columna2=valor2 DESC, ..., columnaN=valorN DESC
Es muy importante usar DESC
para tenerlos en el orden escrito, si escribimos ASC
entonces tendremos un orden inverso (el último valor será el primero), si mezclamos DESC
y ASC, tendremos que los DESC
se harán conforme se escribieron y los ASC
en sentido inverso despúes de los valores DESC
.
Por ejemplo si tenemos una tabla ‘tabla_prueba
‘ que tiene una columna id
y queremos ordenar por los valores 2,1,10,7
en ese orden debemos hacer los siguiente:
SELECT * FROM tabla_prueba WHERE id IN(2,1,10,7) ORDER BY id=2 DESC, id=1 DESC, id=10 DESC, id=7 DESC
Si se omite el WHERE
nos mostrará todos los renglones de la tabla y solamente al tope los valores ordenados como hemos especificado.