Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的sql查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?_Php_Mysql_Regex_Search_Search Engine - Fatal编程技术网

Php 我的sql查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?

Php 我的sql查询只返回完全匹配的字符串。有没有办法返回最近的匹配项?,php,mysql,regex,search,search-engine,Php,Mysql,Regex,Search,Search Engine,我有一个网站,存储了很多pdf文章。这些文章的字段(如标题、作者等)存储在MySQL数据库中。我想构造一个搜索,返回字段“title”的最近匹配项,并让搜索返回结果 例如,我可能有以下标题的文章: “解除对脑肿瘤增殖和分化的调控。” “肿瘤诱导的髓系功能障碍及其对癌症免疫治疗的影响。” “炎症性肠病和癌症的表观遗传学改变。” 因此,如果我进入搜索:“癌症和表观遗传学”,标题类似于(3)的文章就会出现在搜索结果中 目前,当我生成一个sql搜索查询时,只有完全匹配的才会返回结果。有人能告诉我如何解决

我有一个网站,存储了很多pdf文章。这些文章的字段(如标题、作者等)存储在MySQL数据库中。我想构造一个搜索,返回字段“title”的最近匹配项,并让搜索返回结果

例如,我可能有以下标题的文章:

  • “解除对脑肿瘤增殖和分化的调控。”
  • “肿瘤诱导的髓系功能障碍及其对癌症免疫治疗的影响。”
  • “炎症性肠病和癌症的表观遗传学改变。”
  • 因此,如果我进入搜索:“癌症和表观遗传学”,标题类似于(3)的文章就会出现在搜索结果中

    目前,当我生成一个sql搜索查询时,只有完全匹配的才会返回结果。有人能告诉我如何解决这个问题吗?一些宽泛的笔划和指针将非常受欢迎

    我的php代码:

     // 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谢谢,我的错误。