MySQL 之 ORDER BY FIELD
当我们做业务时,避免不了排序功能。而排序一般都是使用 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 协议》,转载必须注明作者和本文链接
推荐文章: