sql >> データベース >  >> RDS >> Mysql

PHPの検索結果は、1文字だけを指定すると異なる結果を出力します

    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...
    

    この場合、両方のfirstnameをグループ化します およびlastname OR条件全体が単一の真/偽の回答になるように(括弧内に)条件をまとめると、その回答がstatusに適用されます。 後で確認してください。




    1. Railsはランダムなレコードを選択します

    2. SQLの主キー:主キーの操作について知っておくべきことすべて

    3. SQLORDERBY複数の列

    4. SQL Developerスクリプトの出力は、sys_refcursorの幅を切り捨てます