buenas como estan..... yo hace poco tuve un problema parecido con consultas para buscador.... y me econtre que con la consulta que vos estas haciendo.... o sea usando like vas a tener problemas cuando en la busqueda ingreses mas de una palabra.... es decir el espacio trunca la cadena y esa consulta puede arrojar resultados no esperado yo lo que te recmiendo es hacer algo como lo siguiente
Código PHP:
<?php
//construimos un array con los campos de la una tabla, en los que querramos que se haga la busqueda
//supongamos que nustra tabla se va a llamar busqueda
$campo=array('juan','marcos', 'pedro', 'adolfo');
//empezamos la construccion de la variable sql y le asignamos una cadena que sera la primera parte de //nuestra consulta sql o sea la clausula WHERE y un parentesis que nos servira para agrupar los //parametros de busqueda o sea el primer parentesis de de la construccion
//hasta ahora nuetra sql seria la siguiente WHERE ( ...... ok??
$sql=' WHERE (';
//ahora lo que haremos sera un bucle para recorrer todo el array $campo y leemos los campos deseados
for($x = 0 ; $x < count($campo); $x++){
//aca lo que hacemos, suponiendo que la variable a buscar provenga de un formulario y se llame clave, //es separar, mediante la funcion explode, y valiendonos del caracter que separar las palabras en //este caso es un espacio en blanco representado por ' ' y poner todas las palabras dentrode un array //llamado $pa y luego por medio de la funcion count, contar la cantidad de cadenas que contenga ese //array
count($pa=explode(' ',$_POST['clave']));
//luego generamos un bucle que recorra el array $pa
for($i = 0; $i < count($pa); $i++ ){
//aca seguimos contruyendo la variable $sql, y le agregamos los campos de acuerdo la posicion $x //(declarado en el primer bucle for) luego ponemos la clausula LIKE y la palabra que buscamos de //acuerdo a la posicion que ocupa dentro del array $pa, lo que hasta ahora construimos es algo como //esto....WHERE ($campo1 LIKE '%clave1%'..... y la multiplicacion del bucle, //ok?
$sql.=$campo[$x].' LIKE '.'\'%'.$pa[$i].'%\' ';
//aqui declaramos un condicional if para pedir que cuando el valor de $i sea menor al total de cadenas
//que contiene el array $pa menos 1 nos agregue a nuestra construccion $sql 'OR', que quiere decir //esto?? que cuando halla mas de una cadena en $pa nos imprimira OR, pero al final no imprimira nada //osea que el $sql queda asi.....
//WHERE ($campo1 LIKE '%clave1%' OR.... y lo que sigue gracias al bucle
if($i < count($pa)-1) {
$sql .= " OR ";
}
}
//aca lo mismo que en el if anterior pero para el array $campo
if($x < count($campo)-1) {
//igual que el otro or pero este imprimira dos parentesis que son los que agruparan nuestra sql, no //dessesperen ya ira tomando forma...... ahora nos qeuda asi....WHERE ($campo1 LIKE '%clave1%' OR
//$campo2 LIKE '%clave2%') OR (
$sql .= ") OR (";
}
//agregamos el ultimo parentesis, el que cierra aquello que abrims junto con la clausula WHERE
$fin=')';
}
//aca metemos todo lo que construimos en la variable $sql, en la variable que representara nuetra //consulta
$query = "SELECT * FROM facturas $sql $fin";
//ahora si buscamos por una sola clave la construccion sera algo asi
/*SELECT * FROM facturas WHERE (juan LIKE '%clave1%' ) OR (marcos LIKE '%clave1%' ) OR (pedro LIKE '%clave1%' ) OR (adolfo LIKE '%clave1%' )*/
//y si ponemos dos
/*SELECT * FROM facturas WHERE (juan LIKE '%clave1%' OR juan LIKE '%clave2%' ) OR (marcos LIKE '%clave1%' OR marcos LIKE '%clave2%' ) OR (pedro LIKE '%clave1%' OR pedro LIKE '%clave2%' ) OR (adolfo LIKE '%clave1%' OR adolfo LIKE '%clave2%' )*/
//si quieren para comprobar que todo ande bien anulen el codigo de coneccion a base de datos, //comentandolo, e impriman la sql para ver que realmente imprime loque queremos
echo $query;
?>
la consulta con match agains es mejor ya que da puntaje de conicidencia a los resultados ylos ordena de acuerdo a eso.... pero es mucho mas complejo.... mas adelante publicare algo sobre eso....
espero les halla servido.... todo esto