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
3 Réponses :
Vous pouvez toujours faire un cas code> instruction même dans
commander par la clause code>,
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
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
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: p>
Sélectionnez votredatColumn, si (yourdatEcolumn)
Vous pouvez également l'utiliser avec orm et toujours utiliser des paginateurs, etc. p>