you are vary nice boy but lazy
这是正常的代码,但是以这种方式搜索
例如标题为: <title> Searched Query ...</title>
当我搜索时:
您各不相同.............结果显示..
随和的好男孩.............结果显示..
变化的懒惰,或男孩的懒惰或变化的懒惰..结果未显示..
请给我一些帮助,以及如何在标题中显示搜索到的查询。
combined
答案 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";
}
}
}