我工作的搜索代码适用于搜索,如果我输入2个或更多字母,但当我给它一个字母的查询时,它给了我所有数据列表我有一个状态,如'found'子句但如果我写一封信,它仍会给我其他结果。如果我正确地输入两个或更多字母,搜索部分可以工作,但如果我放一个字母,它会给我不同的查询结果。
这是我的SQL查询
> $searchtext = ''; if(isset($_GET['q'])) $searchtext =
> mysql_real_escape_string($_GET['q']); if($searchtext) {
> $per_page =16;
> $pages_query = mysql_query("SELECT COUNT('PersonID') FROM persons where firstname like '$searchtext' or
> lastname like '$searchtext' and status like 'found' ");
> $pages = ceil(mysql_result($pages_query,0) / $per_page);
>
> $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
> $start = ($page - 1) * $per_page;
>
>
> // And set the first page $first_page = "1";
>
> $num = mysql_num_rows($pages_query);
> $last_page = ($num / $per_page);
> $next_page = $page + 1;
> $last_page=$pages;
>
>
>
> $query=mysql_query("select * from persons where status like 'found' and firstname like '%$searchtext%' or lastname like
> '%$searchtext%' order by date desc LIMIT $start,$per_page ");
>
> $numrows = mysql_num_rows($query);
>
>
> }
>
> else {
>
> $per_page =16;
> $pages_query = mysql_query("SELECT COUNT('PersonID') FROM persons where status like 'found' ");
> $pages = ceil(mysql_result($pages_query,0) / $per_page);
>
> $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
> $start = ($page - 1) * $per_page;
> $last_page=$pages;
>
> // And set the first page $first_page = "1";
>
>
> $query=mysql_query("select * from persons where status like 'found' order by date desc LIMIT $start,$per_page ");
> $count=mysql_query("select * from persons where status like 'found'");
> $numrows = mysql_num_rows($count);
>
> }
此屏幕截图是默认视图。
对此的查询是$query=mysql_query("select * from persons where status like 'found' order by date desc LIMIT $start,$per_page ");
当我在找到的默认视图中搜索dan
时,此屏幕截图是搜索视图,并收到此结果,这是我用于输出的查询。
`$ query = mysql_query(“select * from who where like'found'和firstname like'%$ searchtext%'或lastname like'%$ searchtext%'order by date desc LIMIT $ start,$ per_page”);
$ numrows = mysql_num_rows($ query);`
最后的图片显示我搜索了a
字母。给我的结果来自各个领域。此外,我有一个冲突,也调用缺少列表我想限制它仅限于找到的,这也是缺少查询的问题,它也发现在找到的整个字段。
我在这里使用的SQL命令是图2中的命令
答案 0 :(得分:2)
您的SQL查询需要正确分组您的条件
$query=mysql_query("select * from persons where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by date desc LIMIT $start,$per_page ");
你在做什么在代码中等同于:
if (status == 'found' && firstname like 'a')
{
return row;
}
else if (lastname like 'a')
{
return row;
}
如果你看到它可能会更清楚一点,如果第一个条件失败(唯一一个检查status == 'found'
那么它会跳到下一个条件(在OR语句之后)并且只检查{ {1}}匹配。
您需要对select语句条件进行分组,以便正确检查:
lastname
在这种情况下,我们将...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...
和firstname
条件组合在一起(在括号中),以便整个OR条件产生一个真/假答案,然后将该答案应用于{ {1}}检查后。