8943


例えば、orderはcreated_atですが、flag=trueのものだけ先に取得して、次にそれ以外を取得したい場合、どういう風にクエリを投げるのがシンプルでしょうか？


CC BY-SA 3.0
2015-04-09T04:14:26.977
8930
2015-04-09T07:39:56.850
525
question
mysql
フラグが立っているものを優先して取得するクエリ


`order by flag desc, created_at`じゃダメですか？

2回投げるのなら素直に`where flag=true`と`where flag=false`になるのではないでしょうか？


CC BY-SA 3.0
2015-04-09T04:18:06.000
8931
2015-04-09T04:26:43.690
2015-04-09T04:26:43.690
2383
2383
8930
answer


フラグはブーリアンのカラムだったら、普通のソートで十分だと思います：

[code]

    SELECT * FROM t ORDER BY flag DESC, created_at;
    
[/code]

ブーリアンではない場合、MySQLの[`IF`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-
functions.html#function_if)でブーリアンに変換できます：

[code]

    SELECT *
    FROM t
    ORDER BY IF(flag = 'xxx', 1, 0) DESC, created_at;
    
[/code]


CC BY-SA 3.0
2015-04-09T07:32:37.880
8943
2015-04-09T07:39:56.850
2015-04-09T07:39:56.850
3371
3371
8930
answer