2011-11-17 14 views
5

Mi tabla tiene dos columnas que necesito para ordenar por:fin de MySQL por dos columnas y ordenar los resultados de nuevo

content title 

Sólo algunas filas tienen datos en la columna de la content pero todos tienen algunos en la columna de la title. Necesito ordenar estas filas para que aquellas con datos en la columna content sean las primeras. Puedo hacer esto por:

ORDER BY content DESC, title ASC 

Sin embargo, esas filas superiores volvieron a causa de su columna content también tienen que ser ordenados alfabéticamente por su title (no por su contenido, que supongo que está sucediendo).

Ideas? Gracias.

Actualización:

Debería haber observado que title es un VARCHAR y content es texto. Entonces texto arbitario. La columna content está vacía si no hay contenido, no es NULO.

Así, por ejemplo:

`title`  `content` 
title a 
title b  this has content 
title c  so does this 
title d 

El orden sería:

title c 
title b 
title a 
title d 
+0

¿Qué contienen las filas que no tienen "datos"? nulo ? – ManseUK

+0

Verá la columna ** title ** ordenada alfabéticamente si y solo la columna ** content ** tiene los mismos datos. Si no, la primera preferencia, cualquier valor va a la columna de ** contenido ** –

+1

¿Puede dar un ejemplo de sus datos y luego también qué orden lo quiere ordenado ... causa confusión de mensajería instantánea! – ManseUK

Respuesta

6

Si entiendo lo que necesita, intente esto:

SELECT * FROM your_table 
ORDER BY 
    CASE 
    WHEN content IS NULL THEN 1 
    ELSE 0 
    END 
    ,content,title 
+0

Esto lo resolvió, acabo de modificarlo cambiando ligeramente IS NULL a = '' y eliminé el campo de contenido adicional. Gracias – Ashley

1
ORDER BY (content='') DESC, title ASC 

o tal vez

ORDER BY title ASC,(content='') DESC 

por lo que siempre en el orden de los títulos, pero que tienen contenidos son primero (cuando el título es el mismo)

0

¿Qué hay de comprobar si el campo está vacío content primero?

ORDER BY if(content = '', 0, 1), content, title 

Esto colocará las filas de contenido no vacías primero. Todo depende de lo que quieras lograr.

Editar: reemplazar content = '' con content IS null si corresponde.

Cuestiones relacionadas