#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