ZAMÓWIENIE, używając niestandardowych priorytetów dla kolumn tekstowych

12

To jest przykładowa tabela:

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

Zarówno namei catbycia Varchar.

cat odzwierciedla kategorię dla tych nazw, ale lubię przypisywać im priorytet, a następnie zapytanie z listą wszystkich, uporządkowane według tego priorytetu.

Jakie są możliwe sposoby? Mógłbym wyodrębnić catdo drugiej tabeli, zbudować klucz obcy itp. Ale biorąc pod uwagę, że moja aplikacja jest bardzo prosta, a struktura może być niezmienna: Jakie możliwości muszę mgrnajpierw wymienić nazwy, następnie devnazwy, a następnie salnazwy ?

Sebastian Roth
źródło

Odpowiedzi:

20

Zakładając, że nie możesz zmienić swojej struktury, możesz użyć instrukcji CASE w swoim ORDER BY:

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

Jeśli jednak możesz zmienić swoją strukturę, możesz utworzyć Categorytabelę zawierającą kod kategorii i ranking, dołączyć do tabeli przykładową Categorytabelę i sortować według tego rankingu.

LittleBobbyTables - Au Revoir
źródło
3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

Ta struktura pomaga mi w Wordpress. Na przykład, aby najpierw wybrać niestandardowe posty inne: plakat i projekt jest niestandardowy WYBIERZ post_typeOD wp_postsZAMÓWIENIA (przypadek, gdy post_type= „plakat”, a następnie 1, gdy post_type= „projekt”, a następnie 2, pozostałe 3 koniec)

John Smith
źródło
Zauważ, że a) nawiasy kwadratowe są opcjonalne: case wyrażenie (jak się to nazywa) jest ważne wszędzie tam, gdzie można podać kolumnę; oraz b) wyrażenie można nieco uprościć docase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart