当前位置: 代码网 > it编程>数据库>Mysql > mysql如何匹配数组字段中的某一个具体值

mysql如何匹配数组字段中的某一个具体值

2024年11月06日 Mysql 我要评论
应用背景业务表中的某个字段存储的值为数组,例如 1,2,3 。现在需要查询其中一个值是数组里面的对应的一个值,该如何匹配。就比如subject这个字段为一个数组,现在需要查询subject包含1的学生

应用背景

业务表中的某个字段存储的值为数组,例如 1,2,3 。

现在需要查询其中一个值是数组里面的对应的一个值,该如何匹配。

就比如subject这个字段为一个数组,现在需要查询subject包含1的学生。

使用模糊查询的问题

因为subject里面存的不是具体的一个值,所以使用=显然是不行的,这个时候大家首先会想到like的模糊查询,我们一起来看看效果

select
	* 
from
	`stu_c` 
where
	subject like '%1%'

执行结果

可以看到将张三跟王五都查出来了,这显然跟我们的需求不符,需求是只包含1的,应该只查出来张三这条数据才对。

解决方案一

使用mysql中的find_in_set(str,fieldname)函数,str是要查询的字符串,fieldname是字段名,参数以“,”分隔,例如1,2,3

匹配单个(只包含1)sql语句如下

select * from stu_c where find_in_set('1', subject) > 0 

匹配单个(只包含1)执行结果

查出了subject包含1的学生信息

匹配多个(包含1跟3)sql语句如下

select * from stu_c
where find_in_set('1', subject) > 0 or find_in_set('3', subject) > 0;

匹配多个(包含1跟3)执行结果

查出了subject包含1跟3的学生信息

解决方案二

使用regexp正则表达式匹配,regexp语法更加强大,功能更全,可以根据不同的需求选择不同的用法,本文主要讲查询包含这个字符的数据

匹配单个(只包含1)sql语句如下

select
	* 
from
	`stu_c` 
where
	concat ( ',', subject, ',' ) regexp ',(1),'

匹配单个(只包含1)执行结果

查出了subject包含1的学生信息

匹配多个(包含1跟3)sql语句如下

select
	* 
from
	`stu_c` 
where
	concat ( ',', subject, ',' ) regexp ',(1|3),'

匹配多个(包含1跟3)执行结果

查出了subject包含1跟3的学生信息

总结

两种方式都能解决匹配数组字段中某一个具体值的问题,但是也有差异,有各自的优缺点,例如find_in_set(str,fieldname)函数,如果前端页面是多选项,也就是需要匹配满足多个值的情况,就需要使用or拼接sql,但是regexp只需要把参数转换为我们需要的格式(',(1|3),')即可。

如果项目需求只需匹配一个值,find_in_set函数直接在xml中使用就行,regexp仍需要将单个参数转换为特定的格式(,(1),)。

综上所述,单个值匹配建议用find_in_set函数,多个值匹配建议用regexp正则表达式。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com