198天前2019-05-29 14:10:08 |    抢沙发  470 
之前一直在为一条记录包含多个分类的应用场景应该怎么进行数据表的设计和查询而烦劳,昨天在网上get到了find_in_set函数。经过测试这个函数非常好用。能够很容易的解决这个需求问题。

mysql

业务需求场景是这样的,一家机构会包含多个分类的课程,要求是前端通过分类筛选要能筛选出包含此分类的机构需求看是简单,但是在设计表的时候我想了很多办法。虽然能满足这个需求,但是过于繁琐。

至于我之前是怎么做的我就不说了,这里给大家推荐一个更简单的方法。使用find_in_set函数。

下面来看看具体怎么操作吧:

首先来介绍一下这个函数吧。

find_in_set(str1,str2) 函数:返回str2中str1所在的位置索引,其中str2必须以","分割开。

然后我们可以设计这样一张表:

id
school
class
1
博文家
1,11,111,2,3,44
2
Alex博客
1,2,3,4,5,22,33

在上面的表中class中表示的是这家机构所包含的分类的ID

那么我们的第一反应应该是使用like来查询,但是like会有一个问题。比如我们查询出包含分类ID为4的机构,那么第一条也会被查询出来因为它包含44所以这样的反馈是错误的。

那么我们下面用find_in_set就可以准确的筛选出来。

语法:

select id,school from tablename where find_in_set('4',class);

这样的话查询的时候就会只查询出记录2 不会出现记录1.

扩展:

我们在使用find_in_set进行字段匹配的时候还可以进行强制排序

比如我们要求查询出来的结果按照2,44,3的顺序进行排序的话,我们可以使用如下语句:

select id,school from tablename order by find_in_set(class,'2,44,3');

好了教程就到这里了,希望本教程对您有所帮助。

发表评论

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享