Вопрос по mysql, sql, sorting – Условная сортировка в MySQL?

3

У меня есть "задачи" таблица с 3 полями:

  1. date
  2. priority (0,1,2)
  3. done (0,1)

Я пытаюсь добиться того, чтобы вся таблица была отсортирована по флагу «Готово», задачи, которые не были выполнены, должны быть отсортированы по приоритету, а задачи, которые выполнены, должны быть отсортированы по дате:

  1. Select * from tasks order by done asc
  2. If done=0 additionally order by priority desc
  3. If done=1 additionally order by date desc

Можно ли сделать это в MySQL без союзов?

Благодарю.

Ваш Ответ

2   ответа
12

ORDER BY (done asc, aux desc) где aux вычисляется сCASE определить приоритет или дату на основе значенияdone (вам может потребоваться привести их к одному и тому же типу, чтобы они соответствовали одному и тому же выражению, например, приведите дату к подходящему целому числу дней).

Например:

SELECT * FROM tab
ORDER BY done desc,
         case done
             when 0 then prio 
             else to_days(thedate)
         end desc;
Спасибо, что работает (даже без to_days) serg
Ах, я думаю, что MySQL автоматически выполняет приведение - ну, всегда трудно догадаться, где MySQL будет выполнять автоматическое приведение и где он выигрывает "-)
7

только немного укорочено с помощью IF () и исправлено упорядочение ASC / DESC.

SELECT * FROM tab
ORDER BY done ASC, IF(done, to_days(thedate), prio) DESC;

Похожие вопросы