Как сортировать строки по ON, OFF, SOLD - PullRequest
1 голос
/ 09 ноября 2011

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

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

Ответы [ 4 ]

7 голосов
/ 09 ноября 2011

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

SELECT * FROM table ORDER BY FIELD(`sort_it`,'ON','OFF','SOLD'),`sort_it`
2 голосов
/ 09 ноября 2011

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

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

Пример демонстрации: http://sqlize.com/MGz6lLb0Qk

1 голос
/ 09 ноября 2011

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

0 голосов
/ 09 ноября 2011
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;
...