2009-05-19 7 views
8

J'ai une chose requête comme ceci:ORDRE Mysql en utilisant la ligne de données date

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

fonctionne très bien lorsque les données ont effectivement une date. La question est, la date de soumission est facultative, donc je reçois parfois 0000-00-00 comme une date, ce qui a l'effet malheureux de placer toutes les lignes non traitées sur le dessus.

Donc, je puis essayé ceci:

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

Quel type d'œuvres, mais pas vraiment - tous les éléments avec des dates (non) obtenir la liste 0000-00-00 dans l'ordre décroissant, suivi de tous les éléments avec 0000-00-00. Qu'est-ce que je veux faire est de commander par date ASC, titre ASC, mais seulement si la date! = 0000-00-00, mais si la date est = 0000-00-00, puis simplement ORDER BY titre ASC sur ceux (Je pense que je l'ai expliqué correctement). Les seules façons que je peux penser pour ce faire sont non basées sur SQL (soit 2 requêtes, ou, chaque requête remplit juste un tableau en mémoire, puis je trier en utilisant PHP).

Y at-il une requête SQL qui peut faire cela?

+2

Est-ce que MySQL ne supporte pas les dates NULL? –

Répondre

4

Votre 2 solution de requête est une bonne, vous pouvez faire tout cela dans SQL en utilisant la commande UNION.

La première requête sera pour les dates non nulles, puis UNION dans la requête pour les dates nulles.

Edit: Quelque chose comme:

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 

Cela peut ne pas être très utile dans ce cas, mais pour les requêtes complexes, UNION peut être utile.

+0

Cela a fonctionné lorsque j'ai placé des parenthèses autour des blocs de sélection comme ceci: (SELECT * FROM tbl WHERE DATE! = '0000-00-00' ORDER BY date ASC) UNION (SELECT * FROM tbl WHERE DATE = '0000 -00-00 ' ORDRE PAR titre ASC) – OneNerd

+0

Oups, vous avez raison, l'UNION fait techniquement les choses sans ordre, mais la parenthèse empêche cela, je crois en la référence qu'il dit cela. – Kekoa

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