У меня есть следующая категория таблицы
category_id
1
2
3
4
5
6
7
8

Я запустил SELECT category_id from category order by category_id > 3 DESC, category_id;

Результат
category_id
4
5
6
7
8
1
2
3
кто-нибудь может объяснить
1) почему такой результат?
2) что значит "заказ по category_id> 3"? 3) что делает второе выражение «category_id»?

-1
HKIT 9 Янв 2019 в 06:03

2 ответа

Лучший ответ

В вашем текущем предложении ORDER BY есть два уровня сортировки:

ORDER BY
    category_id > 3 DESC,
    category_id;

Первый уровень category_id > 3 является логическим выражением и будет иметь значение 0 (ложь) или 1 (истина). Но поскольку вы заказываете этот уровень по убыванию, истинный случай будет первым. Это означает, что все значения category_id больше 3 появятся перед всеми значениями category_id меньше 3.

Тогда второй порядок сортировки равен category_id. Это означает, что в каждой из двух вышеупомянутых групп значения будут упорядочены по возрастанию category_id.

1
Tim Biegeleisen 9 Янв 2019 в 03:07

Это ваш order by:

order by category_id > 3 DESC, category_id

MySQL обрабатывает логическое выражение как целое число в контексте, где это необходимо. Таким образом, category_id > 3 рассматривается как целое число, где 1 означает истину, а 0 - ложь.

Таким образом, это ставит на первое место все категории больше 3 (истина), потому что истина> ложь (1> 0). В каждой группе категории упорядочены по идентификатору.

1
Gordon Linoff 9 Янв 2019 в 03:05