Php 我的sql查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?
我有一个网站,存储了很多pdf文章。这些文章的字段(如标题、作者等)存储在MySQL数据库中。我想构造一个搜索,返回字段“title”的最近匹配项,并让搜索返回结果 例如,我可能有以下标题的文章:Php 我的sql查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?,php,mysql,regex,search,search-engine,Php,Mysql,Regex,Search,Search Engine,我有一个网站,存储了很多pdf文章。这些文章的字段(如标题、作者等)存储在MySQL数据库中。我想构造一个搜索,返回字段“title”的最近匹配项,并让搜索返回结果 例如,我可能有以下标题的文章: “解除对脑肿瘤增殖和分化的调控。” “肿瘤诱导的髓系功能障碍及其对癌症免疫治疗的影响。” “炎症性肠病和癌症的表观遗传学改变。” 因此,如果我进入搜索:“癌症和表观遗传学”,标题类似于(3)的文章就会出现在搜索结果中 目前,当我生成一个sql搜索查询时,只有完全匹配的才会返回结果。有人能告诉我如何解决
// HANDLES SEARCH INPUT
if(isset($_POST['searchstring'])){
$searchterm = $_POST['searchstring'];
if($mysqli->connect_errno){
/*echo 'error connecting to the database';*/
echo 'error db connection';
exit();
}
$searchterm = $mysqli -> real_escape_string($searchterm);
$sql = "SELECT id FROM pdf_library WHERE title='$searchterm'";
$result = $mysqli -> query($sql);
if($result){
$num_rows = $result -> num_rows;
if($num_rows <1){
echo 'no_result';
}else{
echo 'you_have_results';
}
}else{
echo 'searh failed';
exit();
}
})) 也许沿着Levenshtein距离的某些东西会有所帮助
也许沿着莱文施坦距离的某些东西会有所帮助 可能对您有用:
%
零个或多个字符的替换
\
单个字符的替换
[charlist]
要匹配的字符集和范围
[^charlist]
或[!charlist]
仅匹配括号内未指定的字符
而且,正如@Djip在评论中所说的,您需要将like
与通配符一起使用:
SELECT id FROM pdf_library WHERE title LIKE '%$searchterm%'
可能对您有用:
%
零个或多个字符的替换
\
单个字符的替换
[charlist]
要匹配的字符集和范围
[^charlist]
或[!charlist]
仅匹配括号内未指定的字符
而且,正如@Djip在评论中所说的,您需要将like
与通配符一起使用:
SELECT id FROM pdf_library WHERE title LIKE '%$searchterm%'
我认为你实际上必须把你要找的东西当作标签。也就是说,在“癌症和表观遗传学”中,你有两个标签(癌症,表观遗传学)和一个分隔符(和)。我将建立一个标签列表(数组),然后在每个标题中搜索它们,即查看标题中是否包含字符串“癌症”和“表观遗传学” 当然,你会在某些标题中获得比其他标题更多的点击率,这会转化为分数,因此你可以根据这一点对输出进行排序
实际上,您应该只允许用户输入由固定分隔符(例如逗号)分隔的标记,然后执行上述操作。我认为您实际上必须将要查找的内容视为标记。也就是说,在“癌症和表观遗传学”中,你有两个标签(癌症,表观遗传学)和一个分隔符(和)。我将建立一个标签列表(数组),然后在每个标题中搜索它们,即查看标题中是否包含字符串“癌症”和“表观遗传学” 当然,你会在某些标题中获得比其他标题更多的点击率,这会转化为分数,因此你可以根据这一点对输出进行排序
实际上,您应该只允许用户输入由固定分隔符(例如逗号)分隔的标记,然后执行上述操作。您是否尝试过
从pdf_库中选择id,其中title='%$searchterm%'
这是错误的@德米特里格里戈里耶夫。它将搜索带有%
s的字符串您所说的最近匹配是什么意思LIKE
可能对您有所帮助。@DmitryGrigoryev Edit:您是否尝试过从pdf_库中选择id,其中标题为“%$searchterm%”。谢谢,我的错误。您是否尝试过从pdf_库中选择id,其中标题为“%$searchterm%”这是错误的@德米特里格里戈里耶夫。它将搜索带有%
s的字符串您所说的最近匹配是什么意思LIKE
可能会对您有所帮助。@DmitryGrigoryev编辑:您是否尝试过从pdf_库中选择id,其中的标题类似“%$searchterm%”@Djip谢谢,我的错误。