PHP搜索没有完整的单词/名称或拼写错误的单词/名称

时间:2015-10-21 08:33:15

标签: php search

我已经根据名字搜索找到了找工作人员的搜索功能,以下是代码。

的search.php

<?php
include ('connect-db.php');
if (isset($_GET ['forename'])){
$forename = $_GET['forename'];

$forename_escaped = mysqli_real_escape_string ($db, $forename);
$userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename = '$forename_escaped'");
if (mysqli_num_rows($userquery) == null ) echo ('NO RESULTS FOUND IN DATABASE');{
    ?>

但是我希望这个函数做的是返回结果,即使在搜索框中,第一个名字是拼写错误或只是部分输入。

e.g。用户输入 - 搜索:Jennif - &gt; [SEARCH FUNCTION]返回&#39; Jennifer&#39;或用户输入 - 搜索:Jjennifer - &gt; [SEARCH FUNCTION]返回&#39; Jennifer&#39;

的结果

我怎么能执行这样的操作?我正在考虑使用&#39; LIKE&#39; 功能,但到目前为止尚无法解决这个问题。

2 个答案:

答案 0 :(得分:4)

您想要找到字符串之间的差异,也称为Levenshtein距离。

https://en.wikipedia.org/wiki/Levenshtein_distance

对于mysql的实现,您可能希望在post:

之后进行协调

How to add levenshtein function in mysql?

在链接页面中采用Levenshtein实现,您的查询应如下所示:

$userquery = mysqli_query($db, "SELECT * FROM staff WHERE levenshtein(forename, '".$forename_escaped."') < 2");

这意味着levenshtein距离低于2。

答案 1 :(得分:0)

对于任何想要通过搜索获得类似功能的人来说:

我使用通配符来允许搜索在没有输入整个名称的情况下获得结果。这是它的样子:

$userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename LIKE '$forename_escaped%'");

希望这有助于将来的人们。