在数据库中搜索诸如"杏仁茴香饼干"之类的短语并返回结果的最佳方法是什么?
如果我
SELECT *
FROM recipes
WHERE name LIKE '%".$query."%'
并使用短语"杏仁饼干",不会按预期返回任何内容。 但是如果我搜索"茴香饼干",就会返回上面的结果。
我也试过
SELECT *
FROM recipes
WHERE name LIKE '%".$query."%'
OR name LIKE '".$query."%'
OR name LIKE '%".$query."'
具有相同的失败结果。
使用MATCH AGAINST
返回包含"杏仁"的所有内容以及包含"Cookie"的所有内容也不是一个好结果。 返回的结果中是否有快乐的中间值?
您可以尝试使用REPLACE
.这样的事情应该有效:
SELECT *
FROM recipes
WHERE NAME LIKE REPLACE(' ".$query." ',' ','%');
请注意,我特意在.$query.
之间添加空格,以确保替换操作将使您的术语充满通配符。在上面的示例中:
如果$query
='杏仁饼干',那么REPLACE(' ".$query." ',' ','%')
将变成%almond%cookies%
。
你可以在这里测试小提琴:https://www.db-fiddle.com/f/kMzp99S8ENbTkYcW5FVdYN/0