2009-05-19 12 views
8

tengo una consulta algo como esto:MySQL ORDER BY usando fecha fila de datos

SELECT 
title, desc, date 
FROM 
tablename 
ORDER BY 
date ASC, title ASC; 

funciona bien cuando los datos realmente tiene una fecha. El problema es que el envío de la fecha es opcional, por lo que a veces obtengo 0000-00-00 como una fecha, lo que tiene el desafortunado efecto de colocar todas las filas no fechadas en la parte superior.

Por lo tanto, a continuación intentado esto:

SELECT 
title, desc, date 
FROM 
tablename 
ORDER BY 
date DESC, title ASC; 

¿Qué tipo de obras, pero no realmente - Todos los artículos con fechas (no 0000-00-00) estar en la lista en orden descendente, seguido de todos los artículos con 0000-00-00

Lo que quiero hacer es ordenar por fecha ASC, título ASC, pero solo si la fecha! = 0000-00-00, pero si la fecha es = 0000-00-00, entonces solo ORDEN POR título ASC en esos (Creo que lo expliqué correctamente).

Las únicas formas en que puedo pensar para hacer esto no están basadas en SQL (ni 2 consultas, o bien, cada consulta rellena una matriz en memoria, y luego clasifico usando PHP).

¿Existe una consulta SQL que pueda hacer esto?

+2

¿MySQL no admite fechas NULL? –

Respuesta

4

Su solución de consulta 2 es buena, puede hacerlo todo en SQL utilizando el comando UNION.

La primera consulta será para fechas que no sean cero, luego UNIÓN en la consulta para fechas que son cero.

Editar: Algo así como:

SELECT * FROM tbl 
    WHERE DATE != '0000-00-00' 
    ORDER BY date ASC 
UNION SELECT * FROM tbl 
    WHERE DATE = '0000-00-00' 
    ORDER BY title ASC 

Esto puede no ser muy útil en este caso, pero para consultas complejas, UNION puede venir muy bien.

+0

Esto funcionó cuando hice paréntesis alrededor de los bloques seleccionados como esto: (SELECT * FROM TBL donde Date = '0000-00-00' ORDER BY fecha ASC) UNIÓN (SELECT * FROM TBL donde Date = '0000 -00-00 ' ORDEN POR título ASC) – OneNerd

+0

Oops, tienes razón, la UNION hace las cosas técnicamente sin importar el orden, pero el paréntesis lo impide, creo en la referencia que dice esto. – Kekoa

9
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC