mysql查找用逗号链接的字段

更新时间:02-11 教程 由 ぐ夏筱沐 分享

在 mysql 数据库中,经常会遇到需要查询出使用逗号连接的字段的情况。比如在一个用户表中,用户可能会有多个标签,这些标签是用逗号分隔的。我们需要查询出包含某个标签的所有用户,该怎么做呢?

MySQL 提供了一些内置的函数来处理字符串,其中包括 FIND_IN_SET() 函数,它可以查找一个字符串是否在以逗号分隔的字符串列表中:

SELECT * FROM users WHERE FIND_IN_SET('标签1', tags);

上面的查询就可以查找出所有包含标签1的用户。虽然我们可以使用这个函数查询,但是这个函数有一定的缺陷,比如对于下面的情况:

tags:'标签1, 标签11, 标签111'

如果我们使用 FIND_IN_SET('标签1', tags) 来查询,那么这个字符串也会被匹配到,因为它包含了标签1。这个时候我们就需要使用正则表达式来匹配逗号分隔的字符串了。

SELECT * FROM users WHERE tags REGEXP '(^|,)标签1($|,)';

上面的查询使用了正则表达式,其中 (^|,) 表示以逗号或开头开始,($|,) 表示逗号或结尾结束。这个查询就可以准确的检索出符合条件的用户。

如果在实际应用中,每个字段都需要进行这种逗号分隔的查询,那么我们可以将上面的查询进行封装:

CREATE FUNCTION find_in_csv (needle TEXT, haystack TEXT)RETURNS INT DETERMINISTICRETURN FIND_IN_SET(needle, REPLACE(haystack, ' ', ''))

上面的函数将逗号替换为空格,然后再使用 FIND_IN_SET 函数进行匹配,这样就可以将不同的字段全部使用这个函数进行查询了。

声明:关于《mysql查找用逗号链接的字段》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2081811.html