我已经根据名字搜索找到了找工作人员的搜索功能,以下是代码。
的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; 功能,但到目前为止尚无法解决这个问题。
答案 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%'");
希望这有助于将来的人们。