mysqlでorder byはソートを指定できます
9757 ワード
mysqlテーブルのソートORDER BY field 1[ASC[DESC],[field 2...]ASC[DESC],...
ここではnumで並べ替えたいがnum=-1のデータを単独で最大値とする方法1:field(field 1,val 1,val 2,...)
ここでのサイズ順は…>val 2>val 1>field 1(他のデータ)の子の後に進む="order by fieldから大きいorder by fieldまでのUsing filesort(速度の遅い外部ソート)であり、一般的には推奨されません
select * from test order by field(num,-1) asc,num asc;
法二:case when...then...when...then...else...end select*from test order by case when num=-1 then 1 else 0 end desc;
データは2つの部分に分かれています.表のデータは2つの部分に分かれていると思います.num=-1の1つを最大値(特殊部分)として出し、それから他を1つの全体(他の部分)として2つの部分を並べ替え、もう一度並べ替えると所望の効果が得られる方法の2つの例の結果は同じですが、2つ目はもっと使いたいと思っています.大きなもの、小さいものを特殊な部分として自由に選択できるからです
ここではnumで並べ替えたいがnum=-1のデータを単独で最大値とする方法1:field(field 1,val 1,val 2,...)
ここでのサイズ順は…>val 2>val 1>field 1(他のデータ)の子の後に進む="order by fieldから大きいorder by fieldまでのUsing filesort(速度の遅い外部ソート)であり、一般的には推奨されません
select * from test order by field(num,-1) asc,num asc;
法二:case when...then...when...then...else...end select*from test order by case when num=-1 then 1 else 0 end desc;
データは2つの部分に分かれています.表のデータは2つの部分に分かれていると思います.num=-1の1つを最大値(特殊部分)として出し、それから他を1つの全体(他の部分)として2つの部分を並べ替え、もう一度並べ替えると所望の効果が得られる方法の2つの例の結果は同じですが、2つ目はもっと使いたいと思っています.大きなもの、小さいものを特殊な部分として自由に選択できるからです
# test 2 id,name
mysql> desc test;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| num | int(11) | NO | | 0 | |
+-------+------------------+------+-----+---------+----------------+
mysql> select * from test;
+----+-----+
| id | num |
+----+-----+
| 1 | -1 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
+----+-----+
# num=-1
mysql> select * from test order by field(num,-1) desc;
mysql> select * from test order by case when num = -1 then 1 else 0 end desc;
+----+-----+
| id | num |
+----+-----+
| 1 | -1 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
+----+-----+
mysql> select * from test order by field(num,-1) asc;
mysql> select * from test order by case when num = -1 then 1 else 0 end asc;
+----+-----+
| id | num |
+----+-----+
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
| 1 | -1 |
+----+-----+
# ,
mysql> select * from test order by field(num,-1) desc,num desc;
mysql> select * from test order by case when num = -1 then 1 else 0 end desc, num desc;
+----+-----+
| id | num |
+----+-----+
| 1 | -1 |
| 7 | 5 |
| 6 | 4 |
| 5 | 3 |
| 4 | 2 |
| 3 | 1 |
| 2 | 0 |
+----+-----+
mysql> select * from test order by field(num,-1) asc,num asc;
mysql> select * from test order by case when num = -1 then 1 else 0 end asc, num asc;
+----+-----+
| id | num |
+----+-----+
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
| 1 | -1 |
+----+-----+
# num=2 num=2
mysql> select * from test order by case when num = 2 then 1 else 0 end desc;
+----+-----+
| id | num |
+----+-----+
| 4 | 2 |
| 1 | -1 |
| 2 | 0 |
| 3 | 1 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
+----+-----+
# num=2 num=2
mysql> select * from test order by case when num = 2 then 0 else 1 end;
+----+-----+
| id | num |
+----+-----+
| 4 | 2 |
| 1 | -1 |
| 2 | 0 |
| 3 | 1 |
| 5 | 3 |
| 6 | 4 |
| 7 | 5 |
+----+-----+