Нестандартная сортировка в SQL

Предположим есть таблица с некоторым полем статус, которое может принимать следующие значения: D, N, O, P, S. Таблица используется уже довольно давно и содержит кучу данных. К тому же есть куча функционал, привязанного в коде именно к этим значениям.

И тут возникает задача сделать вывод данных из таблицы в соответствии со значением статуса в следующем порядке: N, P, S, O, D. Есть ли варианты сделать это малой кровью?

Конечно есть.

Есть возможность использовать следующий код в условии ORDER:

ORDER BY CASE
  WHEN status = 'N' THEN 1
  WHEN status = 'P' THEN 2
  WHEN status = 'S' THEN 3
  WHEN status = 'O' THEN 4
  WHEN status = 'D' THEN 5
END

Таким образом для каждого статуса мы назначаем свой «вес» и уже сортируем по нему.

Пример вполне рабоспособен для MySQL. На других движках я думаю тоже проблем не будет.

Запись опубликована в рубрике Алгоритмы, Фриланс с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий