COMMANDEZ en utilisant des priorités personnalisées pour les colonnes de texte

12

Voici un exemple de tableau:

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

Les deux nameet catêtre Varchar.

cat reflète une catégorie pour ces noms, mais j'aime leur attribuer une priorité, suivie d'une requête pour les répertorier tous, classés par cette priorité.

Quelles voies sont possibles? Je pourrais extraire catdans une deuxième table, construire une clé étrangère , etc. Mais étant donné mon application est très simple et la structure peut - être non modifiable: Quelles possibilités dois - je énumérer les mgrnoms en premier, suivi par les devnoms, suivis des salnoms ?

Sebastian Roth
la source

Réponses:

20

En supposant que vous ne pouvez pas modifier votre structure, vous pouvez utiliser une instruction CASE dans votre ORDER BY:

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

Cependant, si vous pouvez modifier votre structure, vous pouvez créer un Categorytableau comprenant le code de catégorie et un classement, joindre votre exemple de tableau au Categorytableau et trier par ce classement.

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

Cette structure m'aide dans Wordpress. Par exemple, pour sélectionner les articles personnalisés d'abord l'autre: l'affiche et le projet sont personnalisés SÉLECTIONNER À post_typePARTIR DE LA wp_postsCOMMANDE (cas quand post_type= 'affiche' puis 1 quand post_type= 'projet' puis 2 sinon 3 fin)

John Smith
la source
Notez que a) les crochets sont facultatifs: une case expression (comme on l'appelle) est valide partout où une colonne peut être spécifiée; et b) l'expression peut être légèrement simplifiée pourcase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart