MySQL 之 ORDER BY FIELD

attitude發表於2021-04-15

當我們做業務時,避免不了排序功能。而排序一般都是使用 MySQLORDER 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表,如下:

MySQL 之 ORDER BY FIELD
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 協議》,轉載必須註明作者和本文連結
attitudefx

相關文章