Как упорядочить по пользовательскому правилу, например, как упорядочить, например, 4,2,1,3

#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);