2011-09-22 21 views
5

Digamos que tengo una tabla mySQL que tiene un campo llamado "nombre"mySQL ordena por ciertos valores y luego DESC?

Este campo contiene un nombre por fila.

Hay 10 filas:

Apple 
Pear 
Banana 
Orange 
Grapefruit 
Pineapple 
Peach 
Apricot 
Grape 
Melon 

¿Cómo iba a formar una consulta por lo selecciono de la mesa, quiero los detalles para mostrar de esta manera:

Peach 
Apple 
Apricot 
... and then everything else is listed by descending order. 

Así que, básicamente quiero mostrar algunos resultados especificados en la parte superior de la lista, y luego el resto de los resultados en orden descendente.

Gracias.

Respuesta

-1

Dado que está utilizando php, podría leer sus respuestas en una matriz, mostrar los elementos que desea en la parte superior, almacenarlos en una matriz temporal. Ordene la matriz original en orden alfabético, luego anteponga la matriz temporal.

1

Puede ordenar con condicionales usando la función IF(). La documentación para IF() estados:

IF(expr1,expr2,expr3)

Si expr1 es TRUE (expr1 <> 0 y expr1 <> NULL), entonces SI() devuelve expr2; de lo contrario, devuelve expr3. IF() devuelve un valor numérico o de cadena , según el contexto en el que se utiliza.

Así que usted puede utilizar para ordenar los elementos específicos en la parte superior de esta manera:

SELECT * 
FROM fruit 
ORDER BY 
    IF(name = 'Peach', 0, 1), 
    IF(name = 'Apple', 0, 1), 
    IF(name = 'Apricot', 0, 1), 
    name DESC 

Esta es una serie de órdenes, con la primera prioridad más alta tomando. Entonces, si name='Peach', el valor será 0, para todos los demás, el valor será 1. Dado que en orden ASC predeterminado, 0 es anterior a 1, esto asegura que "Melocotón" estará en la parte superior de la lista. El segundo tipo de la serie especifica cómo romper los vínculos para el primer tipo. En este caso, todos los elementos excluyen 'Melocotón' empate en el primer género con el valor '1'. Y en este caso, 'Apple' se coloca en la parte superior de la lista de enlaces, que en realidad es el segundo lugar en la lista total. Etc ... hasta el último 'nombre DESC'.

Como la otra respuesta señala, CASE() es una alternativa a una serie de IF() s:

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

La primera versión devuelve el resultado que el valor = compare_value. La segunda versión devuelve el resultado para la primera condición que es true. Si no hubo un valor de resultado coincidente, el resultado después de ELSE es devuelto, o NULO si no hay parte ELSE.

6

se podría hacer algo como esto:

select * 
from fruit 
order by 
    case name 
     when 'Peach' then 1 
     when 'Apple' then 2 
     when 'Apricot' then 3 
     else 4 
    end, 
    name 

que debería funcionar en cualquier base de datos SQL.

Cuestiones relacionadas