2010-02-27 11 views
10

Cuando selecciono un conjunto de filas de una tabla usando IN, p.¿Ordenar los resultados de MySQL por secuencia IN?

SELECT x.y, x.z FROM x WHERE x.id IN (23, 55, 44, 12) 

¿Hay algún truco de SQL para recuperarlos en el orden dado en el conjunto IN?

Por lo tanto, en el ejemplo, suponiendo que x tiene filas con identificadores 23, 55, 44 y 12, esas cuatro filas se devolverán en ese orden.

Respuesta

12
SELECT x.y, x.z FROM x WHERE x.id IN (23, 55, 44, 12) 
ORDER BY FIELD (x.id, 23, 55, 44, 12) 
+0

¿Es ORDER BY FIELD compatible con MySQL 5.0? A: ¡Sí lo es! Acabo de verificar. –

4

Se puede utilizar como FIND_IN_SET:

SELECT x.y, x.z FROM x WHERE x.id IN (23, 55, 44, 12) 
ORDER BY FIND_IN_SET(x.id,'23, 55, 44, 12'); 
+1

En vista de ello, no hay nada que elegir entre su respuesta y Steve. Pero que aceptar? En una prueba simple que probé, ORDER BY FIELD fue un poco más del doble de rápido –

Cuestiones relacionadas