小编典典

Mysql LIKE子句和字段中的单独单词

sql

我目前正在使用类似下面的mysql语句来搜索帖子标题。

select * from table where title like %search_term%

但是问题是,如果标题是:Acme launches 5 pound burger并且用户搜索Acme,它将返回结果。但是,如果用户搜索Acme burgerAcme 5 pound,则不会返回任何内容。

当用户搜索多个单词时,是否有办法使它返回结果?就是LIKE在这里使用了正确的事情还是有别的东西可以用吗?


阅读 33

收藏
2021-04-22

共1个答案

小编典典

您可以使用REGEXP来匹配搜索字符串中的任何单词:

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]](', REPLACE('Acme burger', ' ', '|'), ')[[:>:]]')

请注意,这将不是很有效。在这里看小提琴。

如果需要匹配字符串中的每个单词,则可以使用如下查询:

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]]', REPLACE('Acme burger', ' ', '[[:>:]].*[[:<:]]'), '[[:>:]]')

在这里摆弄。但是单词必须以正确的顺序排列(例如,“ Acme
burger”将匹配,“ burger Acme”将不匹配)。有一个REGEXP可以按任何顺序匹配每个单词,但是MySql不支持它,除非您安装支持Perl
regexp的UDF。

2021-04-22