Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/09/2008, 05:37
ilie
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 9 meses
Puntos: 7
Respuesta: Necesito vuestros sabios consejos....a modo de reto!

Cita:
Lo que se puede hacer es al obtener los criterio de búsqueda dividirlos en sus respectivas palabras:

Código PHP:
Código PHP:
//por ejemplo 
if($criterio1 != ""){ 
$listaCriterio1 explode(' ',$criterio1);  

//y con ello formar la condición de búsqueda: 
//si hubiera criterios anteriores hay que comprobarlos por si hay que añadir AND a la claúsura WHERE:  

if($sqlCriterioAnterior != ""  ){$sqlCriterio1 "AND (";} 
else{
$sqlCriterio1 "(";} 

for(
$i 0$i<count($listaCriterio1); $i++){ 
if(
$i>0){$sqlCriterio1.="OR ";} 
$sqlCriterio1 .= "Criterio1 REGEXT '$listaCriterio1[$i]' "

$sqlCriterio1.=") "
$criterioAnterior.=$sqlCriterio1

Donde REGEXP podemos verlo explicado aquí: http://dev.mysql.com/doc/refman/5.0/es/regexp.html

$sqlCriterioAnterior se refiere al criterio
Los paréntesis es porque hacemos queremos que coincidan todos los criterios pero también que en cada uno aparezca al menos una de las expresiones:

(a || b || c ...)&&( d || e || f...).... donde (a || b || c ...) es un criterio de búsqueda.
(esta fórmula se puede sustituir por la que se quiera)

Y por último componer la consulta:

$sqlTotal="Select * FROM ... WHERE $criterioAnterior....;

Los criterios de búsqueda son los condicionantes que añadas a tu consulta (WHERE ....), es decir, los inputs de tu formulario. Este buscador está pensado para que si introduces más de una palabra en un criterio (input) el buscador te las busque por separado y no todas juntas, es decir, no busca estrictamente lo que pones, sino, las palabras que pones.

Con un ejemplo lo verás mejor. Si buscas nombres y pones en el campo "jose manuel" el buscador te buscará tanto "jose" como "manuel" no estrictamente "jose manuel" y si pones sólo "jose" también te buscará cualquier nombre que contenga "jose".

Ahora ten en cuenta que en código sólo está para un criterio (para más sólo tienes que hacer un for con $_POST ó $_GET y en vez de $criterio1 poner $$_POST[$j], qeudando así:

Código PHP:
$sqlCriterio "";//contendrá la condición WHERE...
$sqlCriterioAnterior ="";//indicará si es el primer atributo a buscar
$criterios = array(Criterio1Criterio2...)//Aqui sustituye los criterios por el nombre de cada uno de los atributos de la tabla.


for($j =0$j<count($_POST); $j++){//un ciclo por cada criterio
//comprobamos si ha habido criterios de búsqueda anterirores:
if($sqlCriterioAnterior != ""  ){$sqlCriterio "AND (";} 
else{
$sqlCriterio1 "(";} 

//Obtenemos valores introducidos:
$listaCriterio explode(' ',$_POST[$j]);//obtenemos los distintos términos introducidos

for($i 0$i<count($listaCriterio); $i++){  
if(
$i>0){$sqlCriterio.="OR ";}  
$sqlCriterio1 .= "$criterios[$j] REGEXT '$listaCriterio[$i]' ";  
}  
$sqlCriterio.=") ";  
$criterioAnterior.=$sqlCriterio;  
}  

como indiqué antes la consulta se basa en operadores lógicos cuya representación sería esta:

( a || b || c ...)&&( d || e || f...).... donde (a || b || c ...) es un criterio de búsqueda y a, b ... son las palabras introducidas.


Si no entiendes algo en concreto no dudes en preguntar

Última edición por ilie; 03/09/2008 a las 05:55