sql >> Database teknologi >  >> RDS >> Mysql

PHP-søgeresultat giver et andet resultat, hvis du kun angiver ét bogstav

Din sql-forespørgsel skal gruppere dine betingelser korrekt

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

Det du lavede svarer til noget som dette i kode:

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

Hvis du ser dette kan det være lidt klarere, hvis den første betingelse fejler (den eneste, der kontrollerer om status == 'found' så vil den springe til den næste betingelse (efter OR-sætningen) og kun kontrollere, om lastname matcher.

Du bliver nødt til at gruppere din valgte erklæringstilstand, så den kontrollerer den korrekt:

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

I dette tilfælde grupperer vi begge firstname og lastname betingelser sammen (i parentes), så hele ELLER-betingelsen resulterer i et enkelt sandt/falskt svar, det svar anvendes derefter på status tjek efter.




  1. Server Side Events med PHP &MySQL

  2. PostgreSQL-kolonneværdier skal være i en rækkefølge

  3. Send mail i oracle med UTF-8-kodning i emne

  4. SQL Regex-søgning efter sidste tegn virker ikke