使用带levenshtein的php在MySQL查询中搜索类似的字符串

时间:2012-10-23 19:05:21

标签: php pdo

我正在尝试找出在levenshtein()中使用PHP的“最佳”选项。

当用户将新客户输入数据库时​​,我正在使用PDO语句。

我想要做的是在添加新客户之前进行查询搜索并查看该客户是否已在数据库中以避免可能的重复输入。我无法使用MATCH/AGAINST,因为客户可能在任何时间输入的内容都不同。

这将检查数据库的名字....

$input1 = $_POST['FIRSTNAME'];

$result = array();
$count=1;
            $find = $dbh->query('SELECT BillingFirstName FROM Customers');

            while ($row = $find->fetch (PDO::FETCH_ASSOC))
                 {
                    $fn = $row['BillingFirstName'];
                    array_push($result, $fn);
                 }


        foreach ($result as $word) {

                    echo $word.'<br>';

                        $shortest = -1;
                        $lev = levenshtein($input1, $word);

                    if ($lev == 0) {

                        $closest = $word;
                        $shortest = 0;
                        break;
                    }

                    if ($lev <= $shortest || $shortest < 0) {

                        $closest  = $word;
                        $shortest = $lev;
                    }

            }


        echo "Input word: $input1\n";
        if ($shortest == 0) {
            echo "Exact match found: $closest\n";
        } else {
            echo "Did you mean: $closest?\n";
        }

我如何添加其余的详细信息,例如姓氏,地址,州,邮编。

我是否可以添加更多内容,还是需要创建数组并将其与地址的每个部分一起循环?

1 个答案:

答案 0 :(得分:1)

这将是非常慢的,特别是如果db是任何大小的,你应该使用的是MySQL中的levenshtein函数(不是php)

这是一个很好的:Levenshtein distance