一条记录属于多个分类时,使用 MySQL 自带函数 find_in_set 实现多值匹配查询

发布于:2022-09-02 08:42:25

在实际使用中,我们经常会涉及到一篇文章对应多个分类的情况,那么在前端使用中,如何查询某个分类下的文章呢?本文将告诉你解决方案。


首先我们准备一个文章表,表名和表字段如下。


表名:my_arc

表字段:

arc_id 文章ID,主键自增

arc_name 文章标题

arc_cate 文章所属分类,若有多个,以英文 , 相隔,如 3,6,9


表中数据,如图所示:

6515d9537caf51a3942c0321bfa7c9ad.png


接下来,我们就可以用 MySQL 提供的 find_in_set 函数,进行数据的查询了。


find_in_set 用法:

find_in_set(参数一,参数二)

参数说明:

参数一:想要查询的分类值,如 3

参数二:文章表中的分类所存储的字段,如 arc_cate


需求一:查询 cate = 3 的记录

代码如下:

SQL code?

1
2
# 查询 cate = 3 的记录
SELECT FROM `my_arc` where find_in_set(3,arc_cate);

执行结果如下:

349bfadd0583024ffbeca9430be39698.png


需求二:查询 cate = 1 的记录

代码如下:

SQL code?

1
2
# 查询 cate = 1 的记录
SELECT FROM `my_arc` where find_in_set(1,arc_cate);

执行结果如下:

115561b210ebc97b6c6a0edf6a3fa3d8.png


需求三:查询 cate = 1 或 cate = 3 的记录

代码如下:

SQL code?

1
2
# 查询 cate = 1 or cate = 3 的记录
SELECT FROM `my_arc` where find_in_set(1,arc_cate) or find_in_set(3,arc_cate);

执行结果如下:

f4f2ee073c39d8b45f5dd83e68da1da5.png


需求四:查询 cate = 1 并且 cate = 3 的记录

代码如下:

SQL code?

1
2
# 查询 cate = 1 and cate = 3 的记录
SELECT FROM `my_arc` where find_in_set(1,arc_cate) and find_in_set(3,arc_cate);

执行结果如下:

f8687eed2cde7e194cd9f0dac2d44212.png


http://www.yiduhao.com/index/news/news_detail.html?id=107


阅读 191+

一片空白

父爱如山,不善表达。回想十多年前,总记得父亲有个宽厚的肩膀,小小的自己跨坐在上面,越过人山人海去看更广阔的天空,那个时候期望自己有一双翅膀,能够像鸟儿一样飞得高,看得远。虽然父亲有时会和自己开玩笑,但在做错事的时候会受到严厉的训斥。父亲有双粗糙的大手掌。