我有一个mySQL表,人们可以在其中添加他们的名字和兴趣。我想使用某种单词匹配,找到100%匹配或近似匹配。我听说过levenshtein的距离,但不知道如何让它循环通过我的桌子。
$input = $_POST["interest"];
$result = mysql_query("SELECT interest_desc FROM interests");
做了一些谷歌搜索并达到了这一点
function closest($seed, $haystack){
$shortest = -1;
foreach ($haystack as $word){
$lev = levenshtein($seed, $word);
if ($lev == 0) {
$closest = $word; $shortest = 0; break;
}
if ($lev <= $shortest || $shortest < 0) {
$closest = $word; $shortest = $lev;
}
}
return $closest;
}
$array = mysql_fetch_row($result);
$closestmatch = closest($input,$array);
echo $closetmatch;
答案 0 :(得分:1)
我认为SOUNDEX是您的另一种选择。
http://www.lsauer.com/2013/05/mysql-fuzzy-searching-fulltext-queries.html
答案 1 :(得分:0)
我认为使用PHP来做这个是不正确的方法,MySQL可以轻松有效地做到这一点。我不确定你的整个架构结构是什么样的,但是你可以在MySQL中用搜索参数创建一个PROCEDURE
,然后从PHP调用它。
在MySQL中做类似的事情:
- 使用搜索参数创建proc CREATE PROCEDURE sp_SearchInterests(IN p_SearchParam VARCHAR(30)); DELIMITER //
SELECT interest_desc FROM interest 在哪里interest_desc = p_SearchParam 或者interest_desc LIKE&#39;%pSearchParam%&#39; //
END; DELIMITER;
从PHP CALL sp_SearchInterests('whateveryouwant')
返回所需的结果。