當我們做業務時,避免不了排序功能。而排序一般都是使用 MySQL
的 ORDER BY
來實現。
ORDER BY 語法:
SELECT column1, column2,...
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...
平常我們的實現都是:
-- id升序,此時 asc可以省略
select id,name from user where name like 'php%' order by id asc;
-- id降序
select id,name from user where name like 'php%' order by id desc;
或者多欄位排序:
-- id升序,此時 asc可以省略
select id,name from user where name like 'php%' order by id asc, name desc;
-- id降序
select id,name from user where name like 'php%' order by id desc, name asc;
當需要自定義欄位值的順序時,這種是滿足不了需求的,不過幸好 MySQL已經考慮到這種情況了。
MySQL 提供了以下語法實現:
SELECT column1, column2,...
FROM tbl
ORDER BY FIELD(str,str1,str2,str3,...)[ASC|DESC]
比如,我們有張users表,如下:
state欄位有 enable
,disable
,payment
,vip
這幾個欄位
如果你有幸遇到了一個天馬行空的好產品,他需要你:按照 vip->payment->enable->disable
排序,而你又不想做其他的額外操作(可能就是懶)。這個時候,你就需要探索 ORDER BY FIELD
的玩法了:
select id,name,state, from users where id > 998 ORDER BY FIELD(`state`,'vip', 'payment', 'enable', 'disable')
解決戰鬥。
叉會兒腰,愉快的摸魚吧。
本作品採用《CC 協議》,轉載必須註明作者和本文連結