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

Il risultato della ricerca PHP ha prodotto risultati diversi se fornisci una sola lettera

La tua query sql deve raggruppare correttamente le tue condizioni

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

Quello che stavi facendo è equivalente a qualcosa del genere nel codice:

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

Se vedi questo potrebbe essere un po' più chiaro, se la prima condizione fallisce (l'unica che controlla se status == 'found' quindi passerà alla condizione successiva (dopo l'istruzione OR) e verificherà solo se lastname partite.

Dovrai raggruppare la condizione dell'estratto conto selezionato in modo che lo controlli correttamente:

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

In questo caso, raggruppiamo entrambi firstname e lastname condizioni insieme (tra parentesi) in modo che l'intera condizione OR risulti in un'unica risposta vero/falso, tale risposta viene quindi applicata allo status controlla dopo.