'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にも移植できません。