MySQL find_in_set有多个搜索字符串

Muk*_*ain 40 mysql search

我发现find_in_set只搜索一个字符串: -

find_in_set('a', 'a,b,c,d')
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,'a'是用于搜索的唯一字符串.

有没有办法使用find_in_set类型的功能并通过多个字符串搜索,如: -

find_in_set('a,b,c', 'a,b,c,d')
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想通过三个字符串'a,b,c'进行搜索.

我看到的一种方法是使用OR

find_in_set('a', 'a,b,c,d') OR find_in_set('b', 'a,b,c,d') OR find_in_set('b', 'a,b,c,d')
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

Pav*_*nov 102

没有原生功能,但你可以使用以下技巧实现你的目标

WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"
Run Code Online (Sandbox Code Playgroud)

  • 如果我的 val1|val2|val3 与数据库条目的顺序不一致怎么办。 (3认同)
  • 惊人的答案!- 在我的查询替换 find_in_set 时为我节省了几秒钟您可以为 2 个表 T1 和 T2 执行此操作:.... where CONCAT(",", T1.setcolumn, ",") REGEXP CONCAT(",(", REPLACE (T2.setcolumn, ',', '|'), "),") (2认同)
  • @AbijithAjayan 我通过在连接字符串中添加 **Allow User Variables=true** 解决了同样的问题 (2认同)

Dmi*_*mov 14

MySQL函数find_in_set()只能搜索一组字符串中的一个字符串.

第一个参数是一个字符串,所以没有办法让它将逗号分隔的字符串解析成字符串(你根本不能在SET元素中使用逗号!).第二个参数是一个SET,它反过来用逗号分隔的字符串表示,因此你的希望find_in_set('a,b,c', 'a,b,c,d')工作正常,但它肯定无法'a,b,c'在任何SET中找到一个字符串- 它包含逗号.

  • 是的,你是对的.我认为我的问题的唯一解决方案是使用OR和finset.比如"find_in_set('a','a,b,c,d')或find_in_set('b','a,b,c,d')或find_in_set('b','a,b,c,d ")". (7认同)