特定のレコードを優先してソート
order by id=xx desc のようにすれば最初に
order by id=xx (asc) のようにすれば最後に回す事ができます。
例)id=50のレコードを最初に出したい ※他は順不同
mysql> select id from hoge order by id=50 desc; +----+ | id | +----+ | 50 | | 44 | | 59 | (略) | 55 | | 56 | | 70 | +----+
例)id=50のレコードを最初に出したい ※他は昇順
mysql> select id from hoge order by id=50 desc, id asc; +----+ | id | +----+ | 50 | | 44 | | 45 | (略) | 68 | | 69 | | 70 | +----+
例)id=50のレコードを最後に出したい ※他は順不同
mysql> select id from hoge order by id=50 asc; +----+ | id | +----+ | 44 | | 59 | | 60 | (略) | 54 | | 55 | | 50 | +----+
最初だけ指定して、あとランダム
mysql> select owner_id from user order by owner_id=53407 desc, rand(); +----------+ | owner_id | +----------+ | 53407 | | 36107 | | 54607 | | 54907 | +----------+
ランダムにして、最後だけ指定
mysql> select owner_id from user order by owner_id=53407 asc, rand(); +----------+ | owner_id | +----------+ | 54607 | | 54907 | | 36107 | | 53407 | +----------+
上記の様なascの場合
mysql> select owner_id from user order by owner_id=53407 asc, rand() limit 3;
とかにすると53407は必ず出てこない(最後の4番目になる為)ので注意