业务需求场景是这样的,一家机构会包含多个分类的课程,要求是前端通过分类筛选要能筛选出包含此分类的机构需求看是简单,但是在设计表的时候我想了很多办法。虽然能满足这个需求,但是过于繁琐。
至于我之前是怎么做的我就不说了,这里给大家推荐一个更简单的方法。使用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');
好了教程就到这里了,希望本教程对您有所帮助。
除特别注明外,本站所有文章均为博文家原创,转载请注明出处来自https://www.32e.top/databases/mysql/article-102.html
暂无评论