hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

orderで特定の文字列順に並び替える

数字順で昇順、降順で並び替えるのはよくありますが、 カラムに文字列を設定してしまっていると、並び替えたくなったときにすこし不便ですね。 そんなときにはfieldを使うとうまく並び替えれます。

select 
  id, 
  name
from items
order by field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')

なようなことができます。

Railsで使う場合もscopeに登録しておくと便利そうです。

scope :order_size, -> { order("field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')") }