Mysql LIKE或最接近的匹配

时间:2014-01-23 13:08:19

标签: php mysql

SELECT * FROM store WHERE 
concat_ws(name, type, location) LIKE :search1 OR :search2 OR :search3

for($n=0; $n<$count; $n++)
   $query->bindValue(':search'.$n, '%'.$search[$n].'%', PDO::PARAM_STR);}
}

我有一个搜索查询,我将用户的输入分解为数组,例如:array('i','love','apple');

我的问题是如何按最接近的匹配进行排序?

它搜索3列,因此如果用户输入new york apple,它将从location列返回许多内容与new york,并且许多内容与apple无关

2 个答案:

答案 0 :(得分:4)

如果您想这样做,则需要全文搜索(http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)。这比LIKE复杂一点,但肯定更快更智能。

答案 1 :(得分:2)

您可以在没有全文搜索的情况下执行此操作(默认值无论如何都不适用于您的查询,因为“i”不会被视为单词):

order by ((concat_ws(name, type, location) LIKE :search1) +
          (concat_ws(name, type, location) LIKE :search2) +
          (concat_ws(name, type, location) LIKE :search3)
         ) desc

这个订单最多的匹配最少。您的where子句也需要遵循相同的格式,并有三个不同的like子句。