11
votes

Ordre par date avec les dates passées après les dates à venir

J'ai besoin d'exécuter une requête sur une table dans une base de données MySQL où l'ordre des lignes résultantes sera comme celui-ci:

Si aujourd'hui est le 10/09/12: P>

ORDER BY past_or_future  DESC , CASE WHEN past_or_future  = 1 THEN startdate END ASC, CASE WHEN past = 0 THEN startdate END DESC


0 commentaires

3 Réponses :


16
votes

Vous pouvez toujours faire un cas instruction même dans commander par la clause , xxx


2 commentaires

J'ai cherché plusieurs réponses concernant ce type de commande et j'ai trouvé celui-ci comme le plus facile et le plus rapide. Merci!


GetDate () est MSSQL, pas MySQL. Vous pouvez utiliser Curdate () à la place



4
votes

Oui, une solution consiste à joindre deux requêtes avec une touche de tri "plus puissante" (j'utilise position plutôt que sur le nom de la colonne ci-dessous):

select 1 as uberkey, date1, column2
  from mytable
  where data1 >= '2012-10-09'
union all
select 2 as uberkey, date1, column2
  from mytable
  where data1 < '2012-10-09'
order by 1 asc, 2 asc


0 commentaires

0
votes

Normalement, vous ne pouvez pas trier une colonne dans les deux sens sans utiliser l'union. Union a des désadventations de som surtout si vous utilisez Orm. Si vous voulez votre commande par UC ASC, le passé Desc Vous pouvez le faire avec astuce:

Sélectionnez votredatColumn, si (yourdatEcolumn)

Vous pouvez également l'utiliser avec orm et toujours utiliser des paginateurs, etc.


0 commentaires