sql >> Base de Datos >  >> RDS >> Mysql

El resultado de búsqueda de PHP genera un resultado diferente si solo da una letra

Su consulta sql necesita agrupar sus condiciones correctamente

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

Lo que estabas haciendo es equivalente a algo como esto en código:

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

Si ve esto, puede ser un poco más claro, si falla la primera condición (la única que verifica si status == 'found' luego saltará a la siguiente condición (después de la declaración OR) y solo verificará si lastname coincidencias.

Deberá agrupar su condición de declaración de selección para que la verifique correctamente:

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

En este caso, agrupamos tanto firstname y lastname condiciones juntas (entre paréntesis) para que toda la condición OR resulte en una sola respuesta de verdadero/falso, esa respuesta se aplica al status comprobar después.