Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Das PHP-Suchergebnis gibt ein anderes Ergebnis aus, wenn Sie nur einen Buchstaben eingeben

Ihre SQL-Abfrage muss Ihre Bedingungen richtig gruppieren

$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 ");

Was Sie getan haben, entspricht im Code etwa dem Folgenden:

if (status == 'found' && firstname like 'a')
{
    return row;
}
else if (lastname like 'a')
{
    return row;
}

Wenn Sie dies sehen, ist es möglicherweise etwas klarer, wenn die erste Bedingung fehlschlägt (die einzige, die prüft, ob status == 'found' dann springt es zur nächsten Bedingung (nach der OR-Anweisung) und prüft nur, ob lastname Übereinstimmungen.

Sie müssen Ihre select-Anweisungsbedingung gruppieren, damit sie korrekt überprüft wird:

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

In diesem Fall gruppieren wir beide firstname und lastname Bedingungen zusammen (in Klammern), sodass die gesamte ODER-Bedingung zu einer einzigen Wahr/Falsch-Antwort führt, diese Antwort wird dann auf den status angewendet prüfen nach.