Foros del Web » Programando para Internet » PHP »

Buscar valores con espacios SQL

Estas en el tema de Buscar valores con espacios SQL en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/08/2019, 07:03
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 9
Antigüedad: 5 años, 5 meses
Puntos: 0
Pregunta Buscar valores con espacios SQL

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?
  #2 (permalink)  
Antiguo 07/08/2019, 07:33
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 545
Antigüedad: 13 años, 9 meses
Puntos: 23
Respuesta: Buscar valores con espacios SQL

En los casos de querer buscar en strings de esta forma lo mejor que ofrece MySQL es FULLTEXT Search

Mira aqui para más información: http://www.cristianperez.com/busqued...ext-con-mysql/
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #3 (permalink)  
Antiguo 07/08/2019, 09:53
 
Fecha de Ingreso: abril-2006
Mensajes: 289
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Buscar valores con espacios SQL

Cita:
Iniciado por katanaweb Ver Mensaje
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
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #4 (permalink)  
Antiguo 08/08/2019, 04:58
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 545
Antigüedad: 13 años, 9 meses
Puntos: 23
Respuesta: Buscar valores con espacios SQL

Cita:
Iniciado por tuadmin Ver Mensaje
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
OP quiere encontrar un registro basado en un texto de entrada que no tiene que ser exactamente el que está en la base de datos. Creo que sugerir un search server completo es un poco alejado de la realidad.

FULLTEXT no es solo para MyISAM, funciona también en Innodb por ejemplo
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #5 (permalink)  
Antiguo 09/08/2019, 07:22
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 9
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Buscar valores con espacios SQL

Muchas gracias a ambos, voy a estar intentando y les comento como me va



La zona horaria es GMT -6. Ahora son las 22:36.