Задача с сортировкой таблицы по полю enum кажется простой, пока с ней не столкнешься.. 🙂
Хотя, на самом деле, она и далее может казаться простой — достаточно знать несколько вариантов решения проблемы. Ниже приведены несколько примеров сортировки таблицы по полю типа enum в зависимости от поставленных задач.
1. Нужно отсортировать запрос в алфавитном порядке колонки enum.
SELECT * FROM table ORDER BY CONCAT(FIELD_WITH_ENUM);
2. Требуется получить выборку, сохранив при этом определенный порядок поля. Например, сначала новые заказы, потом те, что находятся в обработке, а в конце — обработанные.
SELECT
*
FROM
table
ORDER BY
FIELD(FIELD_WITH_ENUM, 'new_order', 'in_work_order', 'success_order');
3. Нужно получить выборку, в которой в начале идут новые заказы, далее идут заказы с любым статусом, кроме «Завершенные» — «В обработке», «В доставке», «Ожидают выдачи» и т.д., а в конце — «Завершенные». При этом выборка должна быть отсортирована по имени.
SELECT
*
FROM
table
ORDER BY
CASE FIELD_WITH_ENUM
WHEN 'new_order' THEN 3
WHEN 'success_order' THEN 1
ELSE 2
END,
name