У меня есть следующие значения 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;