MySQL 之 ORDER BY FIELD

当我们做业务时,避免不了排序功能。而排序一般都是使用 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
attitude
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!