テキスト列のカスタム優先順位を使用したORDER BY


12

これはサンプルテーブルです。

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

どちらも namecatVarcharであること。

cat これらの名前のカテゴリを反映しますが、私はそれらに優先度を割り当て、この優先度順に並べられたすべてをリストするクエリが続きます。

どのような方法が可能ですか?cat2番目のテーブルに抽出し、外部キーなどを作成できます。ただし、アプリが非常にシンプルで、構造が変更できない場合、mgr最初にdev名前、次に名前、次に名前の順に並べる必要がある可能性がありsalます。 ?

回答:


20

構造を変更できないと仮定すると、ORDER BYでCASEステートメントを使用できます。

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

ただし、構造変更できる場合はCategory、カテゴリコードとランキングを含むテーブルを作成し、サンプルテーブルをテーブルに結合してCategory、このランキングで並べ替えることができます。


3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

この構造は、Wordpressで役立ちます。たとえば、最初にカスタム投稿を選択する場合:ポスターとプロジェクトはカスタムSELECT post_typeFROM wp_postsORDER BY(case when post_type= 'poster' then 1 when post_type= 'project' then 2 else 3 end)


a)大括弧はオプションです。case (これが呼び出される)は、列を指定できる場所であればどこでも有効です。およびb)発現がわずかに簡略化することができるcase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
コリン「Tハート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.