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? ?

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.


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)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.