MySQL ORDER BY в зависимости от случая заказа ASC или DESC

Я хочу на основе значения, запрашиваемого из другого порядка таблицы ASC или DESC.

Так что-то вроде этого:

SELECT *
FROM table
ORDER BY 
    CASE (SELECT sorting from table2 WHERE table2.id = ?)
        WHEN 1 THEN table.date ASC END 
        WHEN 0 THEN table.date DESC END
    END

Есть ли что-нибудь подобное в MySQL?

Я видел для MS-SQL Server какое-то решение:как упорядочить 2 поля SQL в asc и desc динамически

РЕДАКТИРОВАТЬЯ только что увидел, что я сделал ошибку в описании, исправлено.

Ответы на вопрос(2)

Решение Вопроса
order by if((select sorting from table2 where table2.id = ?) = 1,
  unix_timestamp(table.date), -unix_timestamp(table.date))

если ваш столбец числовой. если это строка, вы можете найти другую функцию для отображения высоких значений в низкие ...

 Sam25 окт. 2012 г., 20:21
Это на самом деле работает! Я могу конвертировать дату, без проблем.
 Nedret Recep25 окт. 2012 г., 20:15
это совсем не правильно. парень хочет отсортировать другую таблицу по другому полю. Как видно из вопросов, значения поля сортировки равны 0 или 1, поэтому упорядочивание по сортировке или -сортировке бесполезно
 David W25 окт. 2012 г., 20:22
Нет, значения поля на самом делесвидание значения, а не 0 или 1, поэтому этот метод может быть полезен. +1 за креативную, нестандартную альтернативу.
 Nedret Recep25 окт. 2012 г., 20:38
@ исключение, точно. Так как приведенный ответ работает правильно. Итак, у нас есть «table2» с полем «sorting», которое равно 0 или 1. Затем на основе значения этого поля другая таблица с именем «table» с полем типа date с именем «date» сортируется по возрастанию или по убыванию. И данный ответ (который я сейчас вижу, воспринимается как работающий странно) не верен, поскольку он никогда нигде не устанавливает сортировку по полю 'table.date'
 xception25 окт. 2012 г., 20:26
@NedretRecep Вы прочитали неправильно, сортировка из таблицы2 может быть только 0 или 1, сортировка из таблицы отличается

Вам нужно скомпоновать ваш запрос в varchar, а затем выполнить EXEC для созданной строки, как показано ниже:

Declare @QueryString varchar(100)
Declare @Direction int

Select @direction = sorting
  from table2
 where table2.id=? //from your original, not clear how you are providing it

Set @QueryString = 'Select * from table order by yourField ' + case when @direction=1 then 'ASC' else 'DESC' end

Exec (@QueryString)

РЕДАКТИРОВАТЬ Предполагая, что ваше поле order_by является числовым, один из используемых вами приемов (хотя я не уверен, что он попадет в лагерь "передового опыта") состоит в умножении значения порядка на поле на -1, чтобы изменить порядок по умолчанию, например

Select @Direction = sorting
  from table2
 where table2.id=? 

Select * 
  from table
  order by (case when @direction=1 then -1 else 1 end) *yourField
 srini.venigalla25 окт. 2012 г., 20:11
Это не Microsoft, чтобы использовать T-SQL
 David W25 окт. 2012 г., 20:21
Blast. Ошибочно прочитал пост ОП, чтобы подумать, что ему нужно решение T-SQL.

Ваш ответ на вопрос