ORDINA PER usando priorità personalizzate per le colonne di testo


12

Questa è una tabella di esempio:

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

Entrambi nameed catessere Varchar.

cat riflette una categoria per questi nomi, ma mi piace assegnare loro una priorità, seguita da una query per elencarli tutti, ordinati per questa priorità.

Quali modi sono possibili? Potrei estrarre catin una seconda tabella, creare una chiave esterna ecc. Ma data la mia app è molto semplice e la struttura potrebbe non essere modificabile: quali possibilità ho di elencare mgrprima i nomi, seguiti dai devnomi, seguiti dai salnomi ?

Risposte:


20

Supponendo che non sia possibile modificare la struttura, è possibile utilizzare un'istruzione CASE in ORDER BY:

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

Se è possibile modificare la struttura, tuttavia, è possibile creare una Categorytabella che include il codice categoria e una classifica, unire la tabella di esempio alla Categorytabella e ordinare in base a questa classifica.


3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

Questa struttura mi aiuta in Wordpress. Ad esempio, per selezionare prima i post personalizzati l'altro: poster e progetto sono personalizzati SELEZIONA post_typeDA wp_postsORDINA PER (caso quando post_type= 'poster' quindi 1 quando post_type= 'progetto' quindi 2 altro 3 fine)


Si noti che a) le parentesi sono opzionali: case un'espressione (come viene chiamata) è valida ovunque sia possibile specificare una colonna; e b) l'espressione può essere leggermente semplificata incase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.