Можно ли определить направление сортировки Order By из выбранного значения поля или оператора if в mysql? - PullRequest
0 голосов
/ 08 декабря 2010

Скажем, например, у меня был такой запрос:

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

То, что я пытаюсь сделать, это поместить значение из поля SortOrder в направление ASC или DESC ORDER BY, чтобы оно было отсортированопо возрастанию или по убыванию в зависимости от значения поля.

Я предполагаю, что это невозможно, но я решил спросить в любом случае.

1 Ответ

1 голос
/ 08 декабря 2010

Если вы пытаетесь отсортировать дату в порядке ASC или DESC на основе переменной, вы можете попробовать использовать оператор CASE в предложении 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

Только один из ORDER BYбудут использованы вышеприведенные пункты, остальные будут последовательно оцениваться по общему значению.Значение в предложении ELSE должно соответствовать тому же типу данных, что и table1.somedate.

...