2010-05-27 6 views
2

Je veux commander les résultats basés sur deux colonnes, mod_time et create_time.MySQL ORDER BY, utilisez la colonne mod_time, mais si mod_time est 0, utilisez la colonne create_time

Je veux que le plus récent soit présent. En ce moment, je

ORDER BY pr.mod_time DESC, pr.create_time DESC 

Cela brise si l'article n'a pas modifié, auquel cas mod_time est 0 et seul le create_time est réglé. Ceci met effectivement n'importe quoi avec un mod_time de 0 à la fin de la commande même si le create_time est plus grand que n'importe quel autre mod_time.

J'espère que cela a du sens.

Est-ce que je peux utiliser ORDER BY pour faire cela?

Merci, Jake

+0

Quel type de données est mod_time et create_time? Est-ce que mod_time est vraiment '0'? –

+0

Ils sont tous les deux 'INT' –

Répondre

2

Je ne sais pas si cela est ce que vous voulez dire, mais je vais l'offrir en cas:

zappent votre ORDER BY autour:

ORDER BY pr.create_time DESC, pr.mod_time DESC 

Cela le fera trier par create_time d'abord. Remarque: Vous pouvez définir mod_time au moment de la création, de sorte qu'un élément créé ait été «modifié» (créé) en même temps que create_time. Cela dépend probablement de ce qui se passe dans votre système.

+0

Cela fonctionne. Et c'est ce que j'ai ajouté il y a un moment avant que je l'ai changé pour le code dans mon post. Je vais faire des tests avec ça comme ça et voir si c'est OK. –

+1

Il s'agit simplement de commander sur create_time. Seulement s'il y a une cravate, mod_time est utilisé. –

4

Vous pouvez utiliser ceci:

ORDER BY CASE WHEN pr.mod_time = 0 THEN pr.create_time 
       ELSE pr.mod_time 
     END DESC, pr.create_time DESC 

Ou peut-être cette version simple est voulez que vous voulez, en supposant un élément ne sera jamais modifié avant sa création:

ORDER BY GREATEST(pr.mod_time, pr.create_time) DESC, pr.create_time DESC 

Notez que ces requêtes ont gagné Ne pas être en mesure d'utiliser un index, le cas échéant.

0

Ajoutez IFNULL(pr.create_time, pr.mod_time) comme l'une des colonnes sélectionnées.

Spécifiez la position du IFNULL dans le ORDER BY.

Questions connexes