Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/10/2003, 06:05
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo que debes hacer es generar una sentencia SQL "dinámicamente" a partir de las palabras que pueda contener tu cadena de busqueda (frase)...

En general tendría que quedarte algo así:

SELECT * FROM tabla WHERE campo LIKE '$palabra1' AND campo LIKE '$palabra2' AND campo LIKE '$palabraN'

(con o sin "wildcars" (comodines) %...%)
Eso ya depende de si quiers que localice exactamente "nose de algo" .. o tambien: "nose demostracion algo"

Código PHP:
/*
IN:
$nombre .. Cadena de busqueda ..
$operador ... AND | OR
OUT
String .. SQL completo con bloques de "LIKE" ...
*/

function busqueda_xnombre_generaSQL($nombre,$operador){
    
    
// Obtenemos las palabras de la cadena de busqueda $nombre 
    // Se entiende como "palabra" a algo que le preceda un espacio.
    
$nombre_palabras=explode(" ",$nombre);

    
// Iniciamos la sentencia SQL .. (ojo con los espacios del final)
    
$sql="SELECT * FROM clientes ";
    
    
// Si la cadena de busqueda está vacia .. 
    
if (empty($nombre)){
      
$sql .=" ORDER BY nombre_cliente";
      return 
$sql;
    } else {
     
     
// Sino ... Empezamos a formar los grupos "LIKE" a base de las palabras que contiene la cadena de busqueda (explode() nos dió un array  ...)
    
$sql .=" WHERE ";
     
    
// Contamos las palabras y formamos un bucle .. Podría ser un for() en lugar de foreach() y el "if" ..    
    
$total_palabras=count($nombre_palabras);
    
$contador=0;
    foreach (
$nombre_palabras as $palabra){
        
// Se vá concatendo cada bloque "LIKE" generado .. Ojo con los espacios.
        
$sql_busqueda .=" nombre_cliente LIKE '%".$palabra."%' ";
        
        
// Se mira si estamos en el último elemento del array (en la última palabra de busqueda .. y si no es así .. concatena el Operador Lógico (puede ser AND u OR ..)
        
if ($total_palabras-$contador){
            
$sql_busqueda .= $operador;
        } 
         
// Se incrementa el contador (el for() lo haría igual ..)
        
$contador++;
    }
    
// Del SQL obtenido: SELECT * FROM tabla WHERE (boques LIKE) ... Le concatenamos el resto de opciones .. Ejemplo: ordenar por cierto campo ...    
   
$sql .=$sql_busqueda." ORDER BY nombre_cliente";
   
// Y .. se devuelve el SQL generado (cadena)
   
return $sql;
   }

La función es sólo para que te hagas una idea .. usa sus nombre de tus campos.

Su uso:

Código PHP:
mysql_query("busqueda_xnombre_generaSQL($frase_busqueda,'AND')"); 

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 14/10/2003 a las 06:09