сортировать определенные строки, используя случай порядка mysql - PullRequest
1 голос
/ 19 января 2012

У меня есть таблица с увеличенным идентификатором от 1,2,3 ... и так далее. То, что я хочу, это просто отсортировать данные в порядке убывания на основе поля 'id', за исключением первых двух строк. Я попытался с помощью запроса ниже: -

SELECT * FROM categories ORDER BY CASE WHEN id<3 THEN 0 ELSE id END DESC

Это дает мне результат, как

id    name
5     Meal
4     Apparel
3     Electronics
1     Sports
2     Lifestyle

Но вывод должен прийти как

id    name
1     Sports
2     Lifestyle
5     Meal
4     Apparel
3     Electronics

Есть ли способ добиться этого с помощью такого запроса?

Ответы [ 3 ]

2 голосов
/ 19 января 2012

Измените его на:

CASE WHEN id<3 THEN id ELSE ~id END

И вместо регистра используйте IF:

IF(id<3, id, ~id)
2 голосов
/ 19 января 2012

Попробуйте:

SELECT *
FROM categories
ORDER BY CASE WHEN id < 3 THEN 10000 - id ELSE id END DESC;
-- ----------------------------^
-- use a very large number

Редактировать:

Лучшее решение, не требующее жесткого кодирования 10000:

SELECT *
FROM categories
ORDER BY CASE WHEN id < 3 THEN id ELSE 3 END, id DESC
-- ---------------------^              ^
-- ------------------------------------|
-- these numbers must be same
1 голос
/ 19 января 2012

Это потому, что вы делаете заказы по убыванию идентификаторов, поэтому порядок 5-4-3-0-0. Вы можете попробовать:

SELECT * FROM categories ORDER BY CASE WHEN id<3 THEN 9999 ELSE id END DESC

Но это не идеальное решение

...