特定のレコードを優先してソート

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番目になる為)ので注意