PEDIR usando prioridades personalizadas para colunas de texto

12

Esta é uma tabela de amostra:

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

Ambos namee catsendo Varchar.

cat reflete uma categoria para esses nomes, mas eu gosto de atribuir uma prioridade a eles, seguida de uma consulta para listar todos eles, ordenada por essa prioridade.

Que maneiras são possíveis? Eu poderia extrair catpara uma segunda tabela, criar uma chave estrangeira etc. Mas, como meu aplicativo é muito simples e a estrutura pode ser inalterável: Quais são as possibilidades para listar os mgrnomes primeiro, seguidos pelos devnomes, seguidos pelos salnomes ?

Sebastian Roth
fonte

Respostas:

20

Supondo que você não possa alterar sua estrutura, você pode usar uma instrução CASE em sua ORDER BY:

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

Se você puder alterar sua estrutura, no entanto, poderá criar uma Categorytabela incluindo o código da categoria e uma classificação, associar sua tabela de amostra à Categorytabela e classificar por essa classificação.

LittleBobbyTables - Au Revoir
fonte
3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

Essa estrutura me ajuda no Wordpress. Por exemplo, para selecionar postagens personalizadas primeiro: - poster e projeto são personalizados SELECT post_typeFROM wp_postsORDER BY (caso quando post_type= 'cartaz' e depois 1 quando post_type= 'projeto' e depois mais 2 finais)

John Smith
fonte
Observe que a) os colchetes são opcionais: uma case expressão (como é chamada) é válida em qualquer lugar em que uma coluna possa ser especificada; eb) a expressão pode ser ligeiramente simplificada paracase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart