Category Archives: MySQL

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.