mysql模糊多次OR查询某一个字段,针对这个字段进行查询分组

一. 需求

有一个mysql表t_test,有两个字段className和studentStr

其中studentStr会用来模糊查询

假如现在有6条数据

1.studentStr字段数据:“小明,小红,小同,小芳,小特,小兰”

2.studentStr字段数据:“小明,小红,小同”

3.studentStr字段数据:“小芳,小特,小兰”

4.studentStr字段数据:“小同,小芳”

5.studentStr字段数据:“小明,小红”

6.studentStr字段数据:“小特,小兰”

有以下sql语句

select * from t_test where studentStr like  '小明' or studentStr like '小红'

这边studentStr like可能会有多条,我希望studentStr like匹配到一样的只返回其中一条就好

比如模糊查询 ”小明“ ”小红“ ,上面 1,2,5条数据都有,只需要返回其中一条就好

二.后面发现group by 是可以写 llke模糊查询的,用下面方式就行
select * from t_test where studentStr like  '小明' or studentStr like '小红' group by (studentStr like  '小明'),(studentStr like '小红')

### 实现 MySQL 中带有多个值的模糊搜索 为了在 MySQL 数据库中执行包含多个值的模糊搜索,可以利用 `LIKE` 运算符配合通配符 `%` 来匹配模式。当涉及到多个可能的值时,通常会结合使用 `OR` 或者更高效的方式是通过正则表达式的支持来简化查询语句。 对于简单的多值模糊搜索,可以直接构建如下 SQL 查询: ```sql SELECT * FROM table_name WHERE column LIKE '%value1%' OR column LIKE '%value2%'; ``` 然而,在处理大量数据或复杂条件的情况下,推荐采用正则表达式来进行更加灵活高效的匹配操作[^1]。下面是一个基于 REGEXP 的例子,它能够一次性检查列中的字符串是否含有任意给定的一组子串之一: ```sql SELECT * FROM table_name WHERE column REGEXP 'word1|word2|word3'; ``` 这里的关键在于理解 `REGEXP` 后面跟的是一个由竖线分隔开来的关键词列表,表示逻辑上的“或”。这种方式不仅使代码更为简洁易读,而且性能上也往往优于多次调用 `LIKE` 和连接大量的 `OR` 子句的方法。 另外值得注意的是,如果目标字段存储了大量的文本信息,则建议考虑全文索引(FULLTEXT index),这能极大提高涉及自然语言处理的任务效率,比如搜索引擎应用里常见的关键字检索功能[^3]。 #### 使用准备好的函数进一步优化 除了直接编写 SQL 之外,还可以创建自定义函数来封装这些复杂的搜索逻辑,从而让应用程序层面上的操作变得更加直观简单。例如,可以通过定义一个接受可变数量参数并返回布尔结果的过程化函数,使得每次想要执行相似类型的查询时只需传递相应的词典即可完成任务。 ```sql DELIMITER // CREATE FUNCTION multi_fuzzy_search(input TEXT, words VARCHAR(255)) RETURNS BOOLEAN DETERMINISTIC BEGIN RETURN input REGEXP CONCAT('(', REPLACE(words, ',', '|'), ')'); END// DELIMITER ; ``` 之后就可以像这样轻松地调用了: ```sql SELECT * FROM table_name WHERE multi_fuzzy_search(column,'word1,word2,word3'); ``` 这种方法特别适合那些经常需要针对同一张表的不同记录集做相同形式筛选的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值