Ordenación Explícita en MySQL

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.

Temas similares