カテゴリー
diary

演算結果で並び替え

f1,f2,f3の3つのbool型のフィールドがあったとしてチェック項目によって並び順を指定したい場合、各フィールドをパーミッションの属性値みたいな扱いで合計値をとれば、好きな並びを指定する事ができる。

例えばこんな感じに並べたい場合
左からf1,f2,f3の値で一番右が属性値の合計
1 0 0 ---> 4
1 1 0 ---> 6
1 0 1 ---> 5
1 1 1 ---> 7
0 1 0 ---> 2
0 1 1 ---> 3
0 0 1 ---> 1

SQLはこんなかんじ
SELECT *, (f1*4 + f2*2 + f3*1) AS sort FROM table ORDER BY FIELD (sort,4,6,5,7,2,3,1)