2010-12-07 28 views
0

Say, par exemple, j'ai eu une requête comme ceci:Est-il possible de définir la direction de tri de Order By à partir d'une valeur de champ sélectionnée ou d'une instruction if dans mysql?

select table1.somedate AS date1, IF(3 = :some_query_parameter, ASC, DESC) AS SortOrder FROM table1 ORDER BY date1 SortOrder; 

Ce que je suis en train de faire est de mettre la valeur du champ SortOrder en ASC ou la direction DESC de ORDER BY afin qu'il soit trié par ordre croissant ou décroissant basé sur la valeur du champ. Je pense que cela ne peut pas être fait, mais j'ai pensé que je demanderais de toute façon.

+0

Me semble avoir besoin d'un équivalent SQL de l'eval de Javascript qui n'existe pas. – leeand00

+0

Dans votre requête, 'SortOrder' devient un identifiant de colonne, SQL renvoie donc une erreur. – Sathya

Répondre

1

Si vous essayez de trier la date dans les deux ASC ou de l'ordre de DESC fonction d'une variable, vous pouvez essayer d'utiliser une instruction CASE dans la clause ORDER BY:

SELECT table1.somedate AS date1 
FROM table1 
ORDER BY 
CASE WHEN :some_query_parameter = 3 THEN table1.somedate ELSE '1/1/1900' END ASC, 
CASE WHEN :some_query_parameter <> 3 THEN table1.somedate ELSE '1/1/1900' END DESC 

Un seul des clauses ORDER BY ci-dessus sera utilisé, l'autre évaluera systématiquement à une valeur commune. La valeur de la clause ELSE doit correspondre au même type de données que table1.somedate.