Как сортировать строки по ON, OFF, SOLD

У меня есть следующие значения 3, которые могут быть в строке в базе данных: ON , OFF , SOLD (column sort_it ). Когда я устанавливаю клаузулы sort на ORDER BY sort_it ASC , я получаю элементы со значением в столбце sort_in OF , затем ON и SOLD . Но мне нужна последовательность ON , OFF , SOLD .

Существуют ли какие-либо способы сделать это как-то? Я имею в виду … изменить способ сохранения данных в базе данных будет требовать, поэтому я бы сделал это в последний момент.

Да, вы можете использовать пользовательские сортировки данных, например:

SELECT * FROM table ORDER BY FIELD(`sort_it`,'ON','OFF','SOLD'),`sort_it` 

Вы можете использовать оператор CASE для генерации вашей пользовательской последовательности заказов из базовых значений, примерно так:

 ORDER BY CASE sort_it WHEN 'ON' then 1 WHEN 'OFF' then 2 WHEN 'SOLD' then 3 END 

Демо-версия: http://sqlize.com/MGz6lLb0Qk

Использование строк – это, как правило, плохая идея. было бы лучше использовать числовой тип. Затем вы можете сказать ON = 1, OFF = 2 и SOLD = 3, а затем сортировать.

 SELECT t.*, IF(sort_it='ON',1,IF(sort_it='OFF',2,3)) as new_sort FROM Table AS t ORDER by new_sort ASC 

Другое решение из комментариев к руководству MySql:

http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html

 select * from tablename order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;