Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/10/2007, 09:22
Manu_Leon
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Re: Buscador con frases en cualquier orden

busca las palabras por separado;
ejemplo:

Código:
$texto=$_POST['texto'];
$texto=mysql_real_escape_string($texto);
$palabras=explode(" ", $texto);
$total_palabras=count($palabras);

$query="SELECT * FROM tabla WHERE 1=2";

for ($i=0;$i<$total_palabras;$i++){
$query.=" OR campo LIKE '%" . $palabras[$i] . "%'";  
}
pequeña explicación:
si pasas las palabras force delta las separará, y obtendrá un array con dos posiciones, en [0]=force y en [1]="delta"

y luego quedará una consulta tal como

SELECT * FROM tabla WHERE 1=2 OR campo LIKE '%force%' OR campo LIKE '%delta%'

El 1=2 lo pongo para que en caso de no pasar nada, laconsulta queda:
SELECT * FROM tabla WHERE 1=2, y por tanto no selecciona nada.


NOTA: lanzará todos los resultados que contengan una de las dos palabras, si lo que quiere es que muestre los resultados que contengan todas las palabras, es decir, que si contiene solo delta, no lo muestre, entonces cambia el OR por un AND:

Código:
$texto=$_POST['texto'];
$texto=mysql_real_escape_string($texto);
$palabras=explode(" ", $texto);
$total_palabras=count($palabras);

$query="SELECT * FROM tabla WHERE 1=2";

for ($i=0;$i<$total_palabras;$i++){
       if ($i==0){
       $query.=" OR (campo LIKE '%" . $palabras[$i] . "%'";
       }
       else{
       $query.=" AND campo LIKE '%" . $palabras[$i] . "%'";  
       }
}
if ($total_palabras>0){
$query.=")";
}
Así la sentencia quedaría:

SELECT * FROM tabla WHERE 1=2 OR (campo LIKE '%delta%' AND campo LIKE '%force%')

y si no pasa palabras quedaria: SELECT * FROM tabla WHERE 1=2

En fin, volviendo a lo mismo, esto buscaría palabras que que contenga delta y force ala vez. Pero por ejemplo en la palabra forcejear encontraría la palabra force.

UN saludo y espero k te sirva

Última edición por Manu_Leon; 05/10/2007 a las 09:33