#sql #mysql
#sql #mysql
Вопрос:
Я не уверен, что название говорит об этом правильно, скорее всего, это не так 🙂
Итак, у меня есть products
таблица, и я хочу упорядочить их по сезону, для которого они сделаны.
Если ‘spring’ равно 1, ‘summer’ — 2, ‘autumn’ — 3 и ‘winter’ — 4, как я могу упорядочить их таким образом, чтобы сначала отображалось ‘summer’, затем ‘spring’, затем ‘winter’ и в конце ‘autumn’. Итак, как 2,1,4,3.
И чтобы прояснить это подробнее, я хочу иметь возможность изменять правило. Это может быть 2,1,4,3 или 4,2,1,3 и т.д. Это делается для отображения сезонных продуктов сверху.
Надеюсь, это объяснение поможет решить проблему. Любые решения приветствуются. База данных — MySQL, язык PHP.
Ответ №1:
Создайте строку идентификаторов «season». Затем выполните упорядочение по полю:
SELECT * FROM foo ORDER BY FIELD(season_id, 4, 2, 1, 3);
Замените часть 4, 2, 1, 3 интерполированной переменной php.
Ответ №2:
Это должно работать для всех основных СУБД:
order
by case when season = 2 then 1
when season = 1 then 2
when season = 4 then 3
when season = 3 then 4
end;
Вы также можете добавить столбец в свою таблицу сезонов, чтобы указать, как они должны быть отсортированы:
table season(
season_id int
,ordinal int
);
select ...
from tab t
join seasons s on(t.season_id = s.season_id)
order
by s.ordinal;
…или, если вам хочется написать непереносимый код, вы можете использовать:
order by field(season_id, 2,1,4,3);