PESANAN DENGAN menggunakan prioritas khusus untuk kolom teks

12

Ini adalah contoh tabel:

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

Keduanya namedan catmenjadi Varchar.

cat mencerminkan kategori untuk nama-nama ini, tetapi saya ingin menetapkan prioritas untuknya, diikuti dengan kueri untuk mendaftarkan semuanya, diurutkan berdasarkan prioritas ini.

Cara apa yang mungkin? Saya dapat mengekstraksi catke dalam tabel kedua, membuat kunci asing, dll. Tetapi mengingat aplikasi saya sangat sederhana dan strukturnya mungkin tidak dapat diubah: Kemungkinan apa yang saya miliki untuk membuat daftar mgrnama terlebih dahulu, diikuti oleh devnama - nama, diikuti oleh salnama - nama ?

Sebastian Roth
sumber

Jawaban:

20

Dengan asumsi Anda tidak dapat mengubah struktur Anda, Anda dapat menggunakan pernyataan KASUS di ORDER Anda DENGAN:

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

Namun, jika Anda bisa mengubah struktur Anda, Anda bisa membuat Categorytabel termasuk kode kategori dan peringkat, gabungkan tabel sampel Anda ke Categorytabel dan urutkan berdasarkan peringkat ini.

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

Struktur ini membantu saya di Wordpress. Misalnya untuk memilih posting khusus terlebih dahulu, yang lain: poster dan proyek adalah kustom PILIH post_typeDARI wp_postsORDER OLEH (kasus ketika post_type= 'poster' lalu 1 ketika post_type= 'proyek' lalu 2 atau 3 akhir)

John Smith
sumber
Perhatikan bahwa a) tanda kurung adalah opsional: case ekspresi (seperti ini disebut) valid di mana saja kolom dapat ditentukan; dan b) ungkapan itu dapat sedikit disederhanakan menjadicase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart