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'];
}}如何將所有內(nèi)容移動(dòng)到一個(gè)查詢中?不希望查詢所有術(shù)語并在PHP中進(jìn)行過濾。
3 回答

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
你需要在MySQL中使用levenshtein函數(shù)并進(jìn)行查詢
$word = mysql_real_escape_string($word);mysql_qery("SELECT `term` FROM `words` WHERE levenshtein('$word', `term`) BETWEEN 0 AND 4");

呼啦一陣風(fēng)
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您有一個(gè)龐大的數(shù)據(jù)庫(kù),您可以先使用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']); ....}
如果你有足夠的時(shí)間玩C擴(kuò)展或程序,你可以獲得更好的性能,但在應(yīng)用真正的levenshtein之前過濾mysql上的記錄將使事情變得更快,幾乎不費(fèi)力。
添加回答
舉報(bào)
0/150
提交
取消