mysql как упорядочить по заданному пользователем порядку / отсортировать по количеству элементов в поле - PullRequest
2 голосов
/ 14 июня 2011

mysql как заказать по заданному пользователем порядку / сортировать

скажем за стол

---------+----------
name     | category
---------+----------
apple    | 0
orange   | 0
book     | 1
notebook | 1
textboo  | 1
phone    | 2

Как заказать в следующем порядке категории, т.е. категории = 1, категории = 0, категории = 2 чтобы получить представление как

---------+----------
name     | category
---------+----------
book     | 1
notebook | 1
textbook | 1
apple    | 0
orange   | 0
phone    | 2

Как мы пишем sql для этого?

Также лучше, если оператор может идентифицировать и сортировать desc на основе количества элементов в каждой категории.

Ответы [ 3 ]

7 голосов
/ 14 июня 2011

Вы хотите сделать это:

SELECT Name, Category
FROM MyTable
ORDER BY 
    Case category
        when 1 then 1
        when 0 then 2
        else 3
    end,
    Name

Обновление

В первом ответе порядок фиксируется по категориям. При заказе по количеству товаров в категории, вы хотите сделать это:

select name, Category, 
       (select count(*) from MyTable mt2 where mt2.Category = mt1.category) CatCount
from MyTable mt1
order by 3 DESC, name
3 голосов
/ 14 июня 2011

Если вы хотите отсортировать по количеству записей в категории, вы можете сделать:

SELECT my_table.name, my_table.category, cats.total FROM
    (SELECT category, COUNT(*) AS total FROM my_table GROUP BY category) cats
    INNER JOIN my_table ON my_table.category = cats.category
    ORDER BY cats.total DESC, my_table.name ASC
0 голосов
/ 14 июня 2011

Если вы знаете порядок при написании запроса, вы можете использовать UNION ALL:

SELECT name, category
FROM table
WHERE category = 1

UNION ALL

SELECT name, category
FROM table
WHERE category = 0

UNION ALL

SELECT name, category
FROM table
WHERE category = 2
...