ORDENAR usando prioridades personalizadas para columnas de texto

12

Esta es una tabla de muestra:

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

Ambos namey catsiendo Varchar.

cat refleja una categoría para estos nombres, pero me gusta asignarles una prioridad, seguida de una consulta para enumerarlos a todos, ordenados por esta prioridad.

¿Qué formas son posibles? Podría extraer caten una segunda tabla, construir una clave foránea, etc. Pero dado que mi aplicación es muy simple y la estructura podría no modificarse: ¿Qué posibilidades tengo de enumerar mgrprimero los nombres, seguidos de los devnombres, seguidos de los salnombres? ?

Sebastian Roth
fuente

Respuestas:

20

Suponiendo que no puede cambiar su estructura, puede usar una declaración CASE en su ORDER BY:

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

Sin embargo, si puede cambiar su estructura, puede crear una Categorytabla que incluya el código de categoría y una clasificación, unir su tabla de muestra a la Categorytabla y ordenar por esta clasificación.

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

Esta estructura me ayuda en Wordpress. Por ejemplo para seleccionar mensajes personalizados primera theh otro: cartel y proyecto se selecciona Personalizado post_typeDE wp_postsORDER BY (caso cuando post_type= 'poster', entonces 1 cuando post_type= 'proyecto' y luego 2 más 3 final)

John Smith
fuente
Tenga en cuenta que a) los corchetes son opcionales: una case expresión (como se llama) es válida en cualquier lugar donde se pueda especificar una columna; y b) la expresión se puede simplificar ligeramente acase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart