Foros del Web » Programando para Internet » PHP »

Busqueda con varias palabras clave

Estas en el tema de Busqueda con varias palabras clave en el foro de PHP en Foros del Web. Saludos Maestros , he aquí mi cuestón: Tengo la siguiente tablita en mi base de datos llammada, cliente. id | nombre | empresa | direccion ...
  #1 (permalink)  
Antiguo 11/02/2005, 17:51
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 11 meses
Puntos: 21
Busqueda con varias palabras clave

Saludos Maestros , he aquí mi cuestón:

Tengo la siguiente tablita en mi base de datos llammada, cliente.

id | nombre | empresa | direccion | observaciones

Muy bien, ahora tengo en una página un formulario con una casilla de texto para que el visitante escriba la palabra clave y un script busca coincidencias en todos los campos de la tabla, sin importar si son mayusculas o minúsculas, para hacer esto realizo lo siguiente:

1.- Recibo la consulta:

$consulta=$_POST['consulta'];

2.- Armo mi Query:

$cadena="SELECT * FROM cliente WHERE ((nombre LIKE '%$consulta%') OR (empresa LIKE '%$consulta%') OR (direccion LIKE '%$consulta%') OR (observaciones LIKE '%$consulta%')) ORDER BY nombre";


Ahora bien, funciona muy bien siempre y cuando el visitante haya introducido solo una palabra, pero si introduce varias palabras ya no, por que intenta buscar coincidencias donde aparezcan exactamente las palbras que escribió, todas las palabras y en el mismo orden.

Esto es, si el visitante escribió "Eduardo compras" en la casilla del formulario, el script intentará buscar la cadena completa, aunque la palabra "Eduardo" este en el campo Nombre y "Compras" en el campo Observaciones, pero co mo no las ecnuentra ambas, contiguas en el mismo campo no me muestra el resultado correcto.

Habria alguna forma para que funcione la búsqueda para varias palabras aunque dichas palabras estén en diferentes campos de la tabla?

No se si me expliqué bien, de todas formas agradeceré infinitamente cualquier ayuda.

Saludos.

Última edición por Elalux; 11/02/2005 a las 17:52
  #2 (permalink)  
Antiguo 11/02/2005, 18:38
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 14 años, 10 meses
Puntos: 10
fijate si algo asi te sirve:

Código PHP:
$consulta=$_POST['consulta'];
$terms explode(" "$consulta);
$cadena "SELECT * FROM cliente WHERE ";

for(@
reset($terms); list(, $term) = @each($terms); $cadena .= 'AND ') {
    
$cadena .= "(nombre LIKE '%$term%' OR empresa LIKE '%$term%' OR direccion LIKE '%$term%' OR observaciones LIKE '%$term%') ";
}

$cadena substr($cadena,0,-5);
$cadena .="ORDER BY nombre"
asi como esta te va a devolver solo las filas donde se encuentren todas las palabras ingresadas (aunque esten en campos diferentes).
Si queres que te devuelva todos los resultados que tengan por lo menos una de las palabras buscadas en uno de los campos tenes que cambiarle:
$cadena .= 'AND ' <- por -> $cadena .= 'OR '
y
$cadena = substr($cadena,0,-5); <- por -> $cadena = substr($cadena,0,-4);


espero que te sirva
  #3 (permalink)  
Antiguo 11/02/2005, 19:49
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 11 meses
Puntos: 21
Hombre safe muchísimas grácias, lo voy a probar ahora mismo.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:15.