搜索查询无法正常工作:类似PHP的查询

时间:2018-08-31 15:00:42

标签: php mysql

you are vary nice boy but lazy

这是正常的代码,但是以这种方式搜索

例如标题为: <title> Searched Query ...</title>

当我搜索时:

  

您各不相同.............结果显示..

     

随和的好男孩.............结果显示..

     

变化的懒惰,或男孩的懒惰或变化的懒惰..结果未显示..

请给我一些帮助,以及如何在标题中显示搜索到的查询。

combined

2 个答案:

答案 0 :(得分:0)

当您搜索title LIKE "%vary lazy%"时,您将获得包含以字符串“ vary lazy”开头且后跟任何其他字符序列或不包含任何字符序列的记录。如果要匹配包含以下单词的字符串-我最好说一下,字符序列-按照特定顺序 的“ vary”和“ lazy”,则应使用:

title LIKE "%vary%lazy%"

但是,这也将匹配“ varylazy”,“变化的lazytown字符”。

假设您通常打算使用您提到的查询,即每个单词都由一个空格字符分隔,并且想要查看这些单词是否以特定的顺序出现在文本中,则可以这样写:

$query = $_GET["query"];
$query = '%'.str_replace(' ', '%', $query).'%';

//... MySQL stuff

请注意,上面的代码非常适合您的需求。我不会将其用作处理查询字符串的通用方法,例如单词之间有多个空格会导致SQL查询中多个%的结果-我什至不确定是否允许这样做。但是,在描述的约束下,此代码应该可以正常工作。

答案 1 :(得分:0)

LIKE '%boy lazy%'将显示以下情况:在boy lazy之前可以有任何事物,而在boy lazy之后可以有任何事物,但是boy lazy将在一起。

在您的情况下,一种方法可能是,您可以爆炸$query,然后使用多个LIKE查询来创建sql查询。示例:

<?php
//$conn = mysqli_connect("localhost","your user","your pass","db");
$query = $_GET['query'];
$min_length = 1;
//echo $query;exit();
if (strlen($query) >= $min_length) { // if query length is more or equal minimum length then
    //echo "success";exit();
    $query = htmlspecialchars($query);
    $query = mysqli_real_escape_string($conn, $query);
    $searchKeys = explode(' ',$query);
    $sql = "SELECT * from table2 where title ";
    foreach ($searchKeys as $key) {
      $sql.= "LIKE '%".$key."%' AND title ";
    }
    $sql = substr($sql, 0, -10);
    //$sql.="ORDER BY date DESC;";
    $raw_results = mysqli_query($conn, $sql) or die(mysql_error());
    if (mysqli_num_rows($raw_results) > 0) { // if one or more rows are returned do following
        while ($res = mysqli_fetch_assoc($raw_results)) {
            echo $res['title']."\n";
         }
    }
}