MySQL порядок с использованием некоторого атрибута - PullRequest
0 голосов
/ 09 января 2019

Я получил категорию таблицы следующим образом
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) что означает "order by category_id> 3"? 3) что делает второе выражение "category_id"?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

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

ORDER BY
    category_id > 3 DESC,
    category_id;

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

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

0 голосов
/ 09 января 2019

Это ваш order by:

order by category_id > 3 DESC, category_id

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

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

...