0

私が作業している検索コードは、2文字以上を入力すると検索に機能しますが、1文字でクエリを実行すると、データのすべてのリストが表示されます「見つかった」句のようなステータスがありますが、それでも単一の文字を入力すると、他の結果が得られます。2文字以上入れると検索部分が動くのですが、1文字入れると違う検索結果になってしまいます。

これが私の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 people 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);` 2枚目の写真

最後の画像は、文字を検索したことを示していaます。私に与えられた結果は、すべての分野から来ています。また、見つかったものだけに制限したい欠落リストも呼び出す競合があります。これは、見つかったフィールド全体でも見つからない欠落のクエリの問題でもあります。

ここで使用する SQL コマンドは、図 2 のものです。 絵3

4

1 に答える 1

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 ステートメントの後) にスキップし、lastname一致するかどうかのみを確認するかどうかを確認する唯一の条件) が少し明確になる場合があります。

select ステートメントの条件をグループ化して、正しくチェックする必要があります。

...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...

この場合、OR 条件全体が 1 つの真/偽の回答になるように、両方firstnameの条件を (括弧で囲んで) グループ化し、その回答がその後のチェックに適用されます。lastnamestatus

于 2013-08-14T18:34:01.017 に答える