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中进行过滤。
3 回答
慕仙森
TA贡献1827条经验 获得超7个赞
你需要在MySQL中使用levenshtein函数并进行查询
$word = mysql_real_escape_string($word);mysql_qery("SELECT `term` FROM `words` WHERE levenshtein('$word', `term`) BETWEEN 0 AND 4");
呼啦一阵风
TA贡献1802条经验 获得超6个赞
如果您有一个庞大的数据库,您可以先使用SOUNDEX过滤单词:
$word = strtolower(mysql_real_escape_string($_GET['term']));$rs = mysql_query("SELECT LOWER(`term`) FROM `words` WHERE SOUNDEX(term) = SOUNDEX(" . $word . ")");while ($row = mysql_fetch_assoc($rs)) { $lev = levenshtein($word, $row['term']); ....}
如果你有足够的时间玩C扩展或程序,你可以获得更好的性能,但在应用真正的levenshtein之前过滤mysql上的记录将使事情变得更快,几乎不费力。
添加回答
举报
0/150
提交
取消