我目前正在使用类似下面的mysql语句来搜索帖子标题。
select * from table where title like %search_term%
但是问题是,如果标题是:Acme launches 5 pound burger并且用户搜索Acme,它将返回结果。但是,如果用户搜索Acme burger或Acme 5 pound,则不会返回任何内容。
Acme launches 5 pound burger
Acme
Acme burger
Acme 5 pound
当用户搜索多个单词时,是否有办法使它返回结果?就是LIKE在这里使用了正确的事情还是有别的东西可以用吗?
LIKE
您可以使用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。