Мы можем использовать выражения в предложении ORDER BY, например:
SELECT t.description
FROM table1 t
ORDER
BY t.description LIKE 'Wo%' DESC
, t.description
Выражение t.description LIKE 'Wo%'
будет иметь значение 0, 1 или NULL.Таким образом, значения NULL description
будут сортироваться последними, значения, удовлетворяющие условию, будут сортироваться первыми (поскольку мы указали DESC
для убывающего порядка сортировки.
Чем более переносимый, более совместимый эквивалент стандартов ANSI будетбыть:
SELECT t.description
FROM table1 t
ORDER
BY CASE WHEN t.description LIKE 'Wo%' THEN 1
WHEN t.description NOT LIKE 'Wo%' THEN 0
END DESC
, t.description
Если бы мы могли опустить эту секунду WHEN
и просто сделать ELSE 0
, что дало бы нам немного другое поведение со значениями NULL descrption
.
Если нам не нравится простое выражение "foo LIKE bar" в предложении ORDER BY
, мы можем заключить его в функцию MySQL, чтобы сделать его более понятным для будущего читателя,
SELECT t.description
FROM table1 t
ORDER
BY IF(t.description LIKE 'Wo%',1,0) DESC
, t.description
Опять же, ключевым моментом здесь является то, что мы можем использовать выражения в предложении ORDER BY
. Для тестирования мы можем включить это же выражение в список SELECT, чтобы мы могли "видеть" (ввозвращаемые результаты) к чему оценивают эти выражения. Но обратите внимание, что нет необходимости, чтобы выражения в ORDER BY
отображались в списке SELECT
.