'id'と'name'の2つの列を持つテーブル'category'があります。
名前を表示して表をアルファベット順に並べたいのですが、「other」という名前が存在する場合は、それを最後の行に設定したいと思います。
位置をマークする別の列を作成せずにこれを達成する方法はありますか?
ORDER BY name DESC { something to set name = "other" to the end }
ありがとう!
'id'と'name'の2つの列を持つテーブル'category'があります。
名前を表示して表をアルファベット順に並べたいのですが、「other」という名前が存在する場合は、それを最後の行に設定したいと思います。
位置をマークする別の列を作成せずにこれを達成する方法はありますか?
ORDER BY name DESC { something to set name = "other" to the end }
ありがとう!
を使用するCASE
と、で条件付きで順序付けを適用できますORDER BY
。name <> 'other'
条件付きで割り当てられた行は、が割り当てられた0
一致する行よりも先にソートother
され1
ます。次に、によってサブオーダーされname
ます。
ORDER BY
CASE WHEN name <> 'other' THEN 0 ELSE 1 END,
name ASC
あなたname DESC
はあなたの例で使用しますが、あなたの説明はそれをアルファベットの昇順でソートしたいことを意味します。それが正しくなく、降順にしname DESC
たい場合は、代わりに使用してください。
MySQLの場合、ブール式(name = 'other')
は0または1に評価されることに注意してください。したがって、これを簡略化してCASE
:を省略することができます。
ORDER BY
/* name <> 'other' returns 0 */
(name = 'other'),
name ASC
ただし、これはどのRDBMSにも移植できません。