魏长东

weichangdong

东邪

mysql排序的妙用

在网上无意间看到mysql排序的一个妙用,在使用order by的时候,可以让一条记录独秀一枝,比如不管id多少,都可以显示在最前面或者最后面。

看例子吧,肯定会一目了然。

这是所有的记录列表:

mysql> select  *   from  my
+----+-------+
| id | price |
+----+-------+
|  1 |   100 |
|  2 |   200 |
|  3 |   300 |
|  4 |   400 |
|  5 |   500 |
|  6 |   600 |
+----+-------+
6 rows in set (0.00 sec)

现在我想id=4的这个记录,排在第一:

mysql> select  *  from  mywcd order by id=4 desc;
+----+-------+
| id | price |
+----+-------+
|  4 |   400 |
|  1 |   100 |
|  2 |   200 |
|  3 |   300 |
|  5 |   500 |
|  6 |   600 |
+----+-------+
6 rows in set (0.00 sec)

你看id=4的,是不是排在最前面了。也可以让他排在最后面:

mysql> select *  from mywcd order by id=4 asc;
+----+-------+
| id | price |
+----+-------+
|  1 |   100 |
|  2 |   200 |
|  3 |   300 |
|  5 |   500 |
|  6 |   600 |
|  4 |   400 |
+----+-------+
6 rows in set (0.00 sec)

神奇吧!

还有更高级点的用法呢:

mysql> select  *  from  mywcd order by id in(4,5) desc,id asc;
+----+-------+
| id | price |
+----+-------+
|  4 |   400 |
|  5 |   500 |
|  1 |   100 |
|  2 |   200 |
|  3 |   300 |
|  6 |   600 |
+----+-------+
6 rows in set (0.00 sec)