mysql查询结果自定义排序

我们知道,使用mysql的order by即可实现指定字段普通的排序效果,但是有时候这种排序效果并不能满足我们的需求。

达到自定义排序的目的,我们有两种实现方式,分别为FIELDFIND_IN_SET

FIELD方式

先看一条sql语句

select id from article where id in(1,2,3);

但是如果我想查询出来的结果排列方式分别为3,1,2该怎么实现呢?

select id from article where id in(1,2,3) order by field(id,3,1,2);

这样实现了上述的需求。

FIND_IN_SET方式

语法:FIND_IN_SET(str,strlist)

还以上述的需求为例,我们可以这样实现

select id from article where id in (1,2,3) order by find_in_set(id,'3,1,2');

另外: FIND_IN_SET除了可以用在order by排序外,还可以用在where语句中。

select id, list, name from `test` where find_in_set('hello',`list`);

该句话表达的意思就是查找list字段中包含hello关键词的信息。

这里list可以是一个变量,也可以是一个字段名称,如果这样用就错了:

select id, list, name from test where 'hello' in (list);

因为in后面要接这样的in('121','hello','good').但是这里list是个字段,所以用FIND_IN_SET函数查找就对了。

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注