我有一个搜索框,用户可以在其中输入。这个输入文本将在数据库中搜索,结果将通过语法检索..
$sql = "SELECT * FROM new WHERE FNAME LIKE '%$a%' LIMIT 0, 30 ";
$result = $conn->query($sql);
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
{
echo '<tr>';
echo $row["FNAME"];
echo '<br>';
echo '</tr>';
}
}
}
它的工作但我的问题是我想搜索类似的单词。 例如,如果有人搜索emran,我的数据库必须要给imran .....
答案 0 :(得分:0)
只需将where子句改为
即可where soundex(FNAME) = soundex('$a')
或
where FNAME sounds like '$a'
答案 1 :(得分:0)
您可能希望根据作为搜索字符串传递的第一个字符构建查询。如果第一个字符是元音(a,e,o,i,u),则可以运行一个函数来使用这些元音构建所有可能的组合。这就是:
<?php
$searchTerm = 'emran';
$probableTerms = buildProbableSearchTerms($searchTerm);
$sql = "SELECT * FROM new WHERE FNAME LIKE '{$probableTerms}' LIMIT 0, 30 ";
$result = $conn->query($sql);
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
{
echo '<tr>';
echo $row["FNAME"];
echo '<br>';
echo '</tr>';
}
}
}
function buildProbableSearchTerms($searchTerm){
$searchTerms = "";
if(strlen($searchTerm)<1){
return "";
}
$arrVowels = array("a", "e", "i", "o", "u");
$arrSString = str_split($searchTerm);
if(in_array(strtolower($arrSString[0]), $arrVowels)){
array_splice($arrSString, 0, 1);
foreach($arrVowels as $vowel){
$searchTerms .= "%{$vowel}" . implode("", $arrSString) . "% OR ";
}
$searchTerms = rtrim($searchTerms, " OR ");
}else{
$searchTerms .= "%{$searchTerm}%";
}
return $searchTerms;
}
var_dump($probableTerms);
// DISPLAYS: '%amran% OR %emran% OR %imran% OR %omran% OR %umran%'
答案 2 :(得分:0)
由于您正在搜索用户特定的名称,因此即使用户在搜索时出现任何拼写错误,也没有这样的直接方法可以为您提供适当的结果。
它就像构建自己的算法一样,如果没有找到它将首先寻找直接匹配,然后它将寻找检测相似名称并返回结果。
我想到的其他选项是创建另一个列,它将存储在输入原始名称时发生的所有常见拼写错误。在您的情况下,列FNAME
将包含imran和FNAME_SEARCH
(根据要求的任何名称) )它将包含常见的错误,如emraan,omran等。
所以你的查询看起来像这样,
$sql = "SELECT * FROM new WHERE FNAME LIKE '%$a%' OR FNAME_SEARCH LIKE '%$a%' LIMIT 0, 30 ";