ORDER BY mit benutzerdefinierten Prioritäten für Textspalten

12

Dies ist eine Beispieltabelle:

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

Beides nameund catVarchar sein.

cat spiegelt eine Kategorie für diese Namen wider, aber ich möchte ihnen eine Priorität zuweisen, gefolgt von einer Abfrage, um sie alle aufzulisten, geordnet nach dieser Priorität.

Welche Wege sind möglich? Ich könnte catin eine zweite Tabelle extrahieren , einen Fremdschlüssel erstellen usw. Aber meine App ist sehr einfach und die Struktur kann nicht geändert werden: Welche Möglichkeiten habe ich, um die mgrNamen zuerst, gefolgt von den devNamen, gefolgt von den salNamen aufzulisten ?

Sebastian Roth
quelle

Antworten:

20

Angenommen, Sie können Ihre Struktur nicht ändern, können Sie eine CASE-Anweisung in Ihrer ORDER BY-Anweisung verwenden:

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

Wenn Sie können Ihre Struktur ändern, jedoch können Sie eine erstellen CategoryTabelle inklusive der Kategorie - Code und ein Ranking, an Ihre Beispieltabelle zum CategoryTisch und sortieren nach diesem Ranking.

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

Diese Struktur hilft mir in Wordpress. Beispielsweise benutzerdefinierte Einträge auszuwählen erste theh andere: Poster und Projekt Brauch wird SELECT post_typeFROM wp_postsORDER BY (Fall , wenn post_type= ‚Plakat‘ dann 1 ist, wenn post_type= ‚Projekt‘ dann 2 sonst 3 - Ende)

John Smith
quelle
Beachten Sie, dass a) die Klammern optional sind: Ein case Ausdruck (wie dieser genannt wird) ist überall dort gültig, wo eine Spalte angegeben werden kann; und b) der Ausdruck kann leicht vereinfacht werden zucase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart