Cita:
Iniciado por katanaweb Estimados,
Hace mucho que no uso PHP y estoy un poco perdido tengo un buscador, que busca "nombre y apellido" en una tabla mySQL, antes tenía dos columnas "nombre" y otra "apellido" y funcionaba, ahora es una sola columna con los dos datos.
Ej. "LOIACONO VICENTE JAIME"
La búsqueda la hago así:
$sql = "SELECT * FROM clientes WHERE nombre LIKE '%".$name."%'";
Pero como ven, por ejemplo el caso anterior tiene un doble espacio, y por ejemplo si no se escibe tan cual no funciona.
Alguna sugerencia?
solo usa mas LIKE's, el string de nombre filtralo y conviertelo a LIKE de SQL, y unelos con AND u OR dependiendo del resultado
Código PHP:
<?php
$nombre = 'pedro perrales'; //extremos las partes del nombre
$array_nombres = explode(" ",$nombre);
//Filtramos el resultado para ignorar espacios en blanco
$array_nombres = array_filter($array_nombres,function($val){
return strlen($val)>1;//No existe ningun nombre que sea de un solo caracter
});
//Creamos un array con el formato del LIKE MSYQL
$array_sql_like = array_map(function($name){
return "nombre LIKE '%".$name."%'";
},$array_nombres);
//Unimos todos los LIKES con AND para indicar que todo el nombre debe estar en el registro
$sql_like = implode(" AND ",$array_sql_like);
//SELECT * FROM clientes WHERE nombre LIKE '%pedro%' AND nombre LIKE '%perrales%'
//Unimos todos los LIKES con OR para indicar que cualquier nombre debe estar en el registro
//$sql_like = implode(" OR ",$array_sql_like);
//SELECT * FROM clientes WHERE nombre LIKE '%pedro%' OR nombre LIKE '%perrales%'
$sql = "SELECT * FROM clientes WHERE ".$sql_like."";
print($sql);
ya de ti depende como hacerlo, el FULLTEXT que te sugirieron, solo trabaja con tablas MYISAM el LIKE es para todo tipo de motor
las diferencias entre un LIKE y FULLTEXT son
LIKE=string exacto
FULLTEXT=string casi similar
en todo caso muchos dejaron de usar ese tipo de búsqueda FULLTEXT y a los que les es necesario estan USANDO sphinx o similares