как я могу получить определенное значение в верхней части результата запроса путем сортировки?

#mysql

#mysql

Вопрос:

у меня есть таблица со столбцом состояния

 CREATE TABLE movies
(
id int NOT NULL AUTO_INCREMENT,
title varchar(100) NOT NULL default '',
status int NOT NULL
);
  

статус может быть от 1 до 4
, и я хочу отсортировать результат по статусу

я могу легко отсортировать свой запрос по status asc и desc и получить строки с 1 и 4 в качестве значения сверху

 $sql = "SELECT * FROM tbl order by `status` ASC";
  

но как я могу получить 2 и 3 в верхней части результата?

Ответ №1:

 select *
from tbl
order by case when status in (2, 3) then 0 else 1 end, 
    `status`
  

Комментарии:

1. @max: CASE оператор генерирует искусственный столбец сортировки. Когда значение status равно 2 или 3, CASE возвращается 0, который будет отсортирован до 1 ( ASC это поведение по умолчанию). Затем строки сортируются по status .

Ответ №2:

 SELECT * FROM tbl where status IN (2,3) order by `status` ASC
UNION
SELECT * FROM tbl where status IN (1,4) order by `status` ASC
  

Ответ №3:

Вы можете использовать CASE (как ответ RedFilter) или FIELD() функцию:

 SELECT * 
FROM tbl 
ORDER BY FIELD(status, 2, 3, 1, 4)    --- the order you prefer