猿问

Levenshtein:MySQL + PHP

Levenshtein:MySQL + PHP

$word = strtolower($_GET['term']); $lev = 0;$q = mysql_query("SELECT `term` FROM `words`"); while($r = mysql_fetch_assoc($q)) { 
    $r['term'] = strtolower($r['term']); 

    $lev = levenshtein($word, $r['term']);

    if($lev >= 0 && $lev < 5)
    {
        $word = $r['term'];
    }}

如何将所有内容移动到一个查询中?不希望查询所有术语并在PHP中进行过滤。


PIPIONE
浏览 515回答 3
3回答

慕仙森

你需要在MySQL中使用levenshtein函数并进行查询$word&nbsp;=&nbsp;mysql_real_escape_string($word);mysql_qery("SELECT&nbsp;`term`&nbsp;FROM&nbsp;`words`&nbsp;WHERE&nbsp;levenshtein('$word',&nbsp;`term`)&nbsp;BETWEEN&nbsp;0&nbsp;AND&nbsp;4");

呼啦一阵风

如果您有一个庞大的数据库,您可以先使用SOUNDEX过滤单词:$word&nbsp;=&nbsp;strtolower(mysql_real_escape_string($_GET['term']));$rs&nbsp;=&nbsp;mysql_query("SELECT&nbsp;LOWER(`term`)&nbsp;FROM&nbsp;`words`&nbsp;WHERE&nbsp;SOUNDEX(term)&nbsp;=&nbsp;SOUNDEX("&nbsp;.&nbsp;$word&nbsp;.&nbsp;")");while&nbsp;($row&nbsp;=&nbsp;mysql_fetch_assoc($rs))&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;$lev&nbsp;=&nbsp;levenshtein($word,&nbsp;$row['term']); &nbsp;&nbsp;&nbsp;&nbsp;....}如果你有足够的时间玩C扩展或程序,你可以获得更好的性能,但在应用真正的levenshtein之前过滤mysql上的记录将使事情变得更快,几乎不费力。
随时随地看视频慕课网APP
我要回答