ORDER BY с использованием пользовательских приоритетов для текстовых столбцов

12

Это пример таблицы:

name | cat
----------
hugo | sal
bob  | mgr
mike | dev
jeff | mgr
john | dev

И то nameи catдругое.

cat отражает категорию для этих имен, но мне нравится назначать им приоритет, а затем запрашивать их список, упорядоченный по этому приоритету.

Какие способы возможны? Я мог бы извлечь catво вторую таблицу, построить внешний ключ и т. Д. Но, учитывая, что мое приложение очень простое и структура может быть неизменной: какие возможности я должен mgrсначала перечислить имена, затем devимена, а затем salимена ?

Себастьян Рот
источник

Ответы:

20

Предполагая, что вы не можете изменить свою структуру, вы можете использовать оператор CASE в вашем ORDER BY:

ORDER BY case cat when 'mgr' then 1 when 'dev' then 2 else 3

Однако, если вы можете изменить свою структуру, вы можете создать Categoryтаблицу, включающую код категории и рейтинг, присоединить свою таблицу примеров к Categoryтаблице и отсортировать по этому рейтингу.

LittleBobbyTables - Au Revoir
источник
3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

Эта структура помогает мне в Wordpress. Например, чтобы выбрать пользовательские сообщения, сначала другие: плакат и проект настраиваются SELECT post_typeFROM wp_postsORDER BY (случай, когда post_type= 'poster', затем 1, когда post_type= 'project', затем 2 или 3 end)

Джон Смит
источник
Обратите внимание, что а) квадратные скобки являются необязательными: case выражение (как оно называется) действует в любом месте, где может быть указан столбец; и б) выражение может быть немного упрощено доcase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart