2011-05-12 15 views
5

Digamos que tengo una tabla de flores con los colores asociados. ¿Es posible obtener una lista de flores y pedirlas, por ejemplo, Yellow primero, luego Blue, luego Red. Básicamente, quiero especificar una lista de valores y ordenar el resultado por esos valores. ¿Posible?MySQL - ordenando por algo que no es ASC o DESC

Respuesta

9

Usted podría utilizar FIND_IN_SET:

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

..o la sentencia CASE ANSI:

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 
2

Usted puede agregar un campo en la tabla de colores y sort_order y proporcionar valores de acuerdo a la exigencia especie . En la consulta puede usar ORDER BY sort_order ASC

Espero que desee pedirlo según un requisito dinámico no explícitamente para estos tres colores mencionados. Esto le permitirá completar la flexibilidad para administrar el orden de clasificación.

+0

Cómo la adición de una columna resuelve el problema cuando a veces necesito pedir (amarillo, azul, rojo), a veces (azul, amarillo, rojo), a veces (rojo, amarillo, azul), .... – StackOverflowNewbie

+8

THe ' El campo sort_order 'debe almacenar esa jerarquía en la que necesita ordenar. Por ej. el valor del color y 'sort_order' archivado debe ser el siguiente cuando desee ordenar (Azul, Amarillo, Rojo), Azul - 1 Amarillo - 2 Rojo - 3 ¿Cuándo quiere ordenar (Rojo, Amarillo, Azul) Azul - 3 Amarillo - 2 Rojo - 1 Esto le ayudará a modificar el orden de clasificación sin editar el código php. En un extremo superior, puede proporcionar una provisión web para administrar el orden de clasificación en una página, de modo que cuando el usuario/administrador quiera cambiar el orden. Así es como se maneja en sitios web de alta gama. –

2

Mi elección sería usar la función FIELD(str, str1, str2, ...).

Devuelve el índice (posición) de str en la lista str1, str2, str3, .... Devuelve 0 si str no se encuentra.

lo que podría utilizar el valor de retorno para ordenar su lista de resultados:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

Si desea invertir el orden, sólo tiene que añadir DESC.

Cuestiones relacionadas