我创建了一个查询,该查询根据用户创建的关键字从数据库中获取相当短的字符串(感谢 zhikharev的回答):
$searchArray = explode(' ', $search);
$searchNumber = count($searchArray);
$query = "SELECT * FROM tags WHERE tags.tag LIKE CONCAT('%',?,'%')" .
str_repeat(" OR tags.tag LIKE CONCAT('%',?,'%')", $searchNumber - 1);
$stmt = $mysqli -> prepare($query);
$bind_names[] = str_repeat('s', $searchNumber);
for ($i = 0; $i < count($searchArray); $i++){
$bind_name = 'bind'.$i; /*generate a name for variable bind1, bind2, bind3...*/
$$bind_name = $searchArray[$i]; /*create a variable with this name and put value in it*/
$bind_names[] = & $$bind_name; /*put a link to this variable in array*/
}
call_user_func_array(array($stmt, 'bind_param'), &$bind_names);
$stmt -> execute();
我的问题是我不知道如何按相关性对结果进行排序。请注意,数据库中的一个标签可以包含多个单词。
假设用户搜索“纽约市”。然后在数据库中我有:
New York
York
New York City
New Zealand
Kansas City
我希望结果如下所示:
New York City
New York
New Zealand
York
Kansas City
它应该查找与用户输入中的单词最匹配的标签,以及与搜索中单词的顺序大致相同的标签。