2015-10-21 43 views
3

我已经根据名字搜索找到工作人员的搜索功能,下面是该代码。PHP搜索没有整个单词/名称或拼错单词/名称

的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');{ 
    ?> 

但我想这个功能做的是返回,即使在搜索框中的第一个名字是由一个字母拼错或仅部分进入的结果。

例如用户输入 - 搜索:Jennif - > [搜索功能]返回结果为“詹妮弗”或用户输入 - 搜索:Jjennifer - > [搜索功能]返回结果为“詹妮弗”

我怎么能执行一个操作喜欢这个?我正在考虑使用'LIKE'函数,但到目前为止还没有弄清楚。

+0

很高兴你提到,实际上我几个星期前刚刚通过我的页面添加参数,并完全忘记了这个。 –

回答

4

你想找到字符串之间的区别,也称为Levenshtein距离。

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

对于实现到MySQL,你可能想海外商品会有下面的帖子:

How to add levenshtein function in mysql?

两者的链接页面内的莱文斯坦实现您的查询应该是这样的:

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

这意味着levenshtein距离低于2.

+0

好吧,我已经阅读了Levenshtein距离,并查看了另一篇关于它共享的SO帖子,我的下一个问题是,如何在当前搜索函数内执行php? –

+0

我编辑了我的帖子来回答这个问题... –

+0

感谢编辑,最后一个问题虽然(我保证)我仍然不知道如何/在哪里我可以从其他链接添加代码 –

0

对于任何人想要一个此相似的功能与他们的搜索:

我用通配符允许搜索,获得的结果,而在输入一个完整的名字在这里是什么样子:

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

希望这可以帮助未来的人。

相关问题