Php 类似Mysql或通过最接近的匹配 从存储位置选择* concat_ws(名称、类型、位置)如:search1或:search2或:search3 对于($n=0;$nbindValue(':search'.$n'.%.$search[$n].%',PDO::PARAM_STR);} }

Php 类似Mysql或通过最接近的匹配 从存储位置选择* concat_ws(名称、类型、位置)如:search1或:search2或:search3 对于($n=0;$nbindValue(':search'.$n'.%.$search[$n].%',PDO::PARAM_STR);} },php,mysql,Php,Mysql,我有一个搜索查询,我把用户的输入分解成数组,例如:数组('I','love','apple') 我的问题是如何按最接近的匹配项排序 它搜索3列,因此如果用户键入new york apple,它将从location列返回许多与纽约有关的内容,而许多内容与apple无关如果您想这样做,您将需要全文搜索()。这比LIKE要复杂一点,但肯定更快更智能。如果要执行此操作,您需要全文搜索()。这比LIKE要复杂一点,但肯定更快更智能。您可以在没有全文搜索的情况下执行此操作(默认值对您的查询无效,因为“i”不

我有一个搜索查询,我把用户的输入分解成数组,例如:数组('I','love','apple')

我的问题是如何按最接近的匹配项排序


它搜索3列,因此如果用户键入new york apple,它将从location列返回许多与纽约有关的内容,而许多内容与apple无关

如果您想这样做,您将需要全文搜索()。这比LIKE要复杂一点,但肯定更快更智能。

如果要执行此操作,您需要全文搜索()。这比LIKE要复杂一点,但肯定更快更智能。

您可以在没有全文搜索的情况下执行此操作(默认值对您的查询无效,因为“i”不会被当作一个词来对待):


这一顺序以最多匹配最少的顺序排列。您的
where
子句也需要遵循相同的格式,具有三个不同的
like
子句。

您可以在不进行全文搜索的情况下执行此操作(默认值对您的查询无效,因为“i”不会被视为单词):


这是由最多匹配到最少的顺序。您的
where
子句也需要遵循相同的格式,有三个不同的
子句。

我以前尝试过全文搜索,因为我的数据库将有许多中文,并且我做了一些测试,匹配有困难搜索一些中文的内容才能找到如果将这些语言中的单词或其他索引词添加到全文索引中,则必须对它们进行预处理,以使它们由一些任意分隔符分隔,例如“”。()(据我所知),没有字符显示单词的结尾,你必须添加它们才能进行全文搜索。我以前尝试过全文搜索,因为我的数据库将有许多中文,我做了一些测试,匹配有困难搜索一些中文的内容为了能够在全文索引中添加这些语言中的单词或其他索引词,你ust对它们进行预处理,以使它们由任意分隔符分隔,例如“”。(),因为(据我所知)没有字符显示单词的结尾,所以必须添加它们才能进行全文搜索。
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);}
}
order by ((concat_ws(name, type, location) LIKE :search1) +
          (concat_ws(name, type, location) LIKE :search2) +
          (concat_ws(name, type, location) LIKE :search3)
         ) desc