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條經驗 獲得超8個贊
你需要在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
提交
取消