Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/10/2007, 11:15
Avatar de Carxl
Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Advanced Search ???

El código prometido:

Código PHP:
<?php
/*FUNCION BUSCAR EN DETERMINADAS TABLAS DE LA DB
Realizada por: Carxl
Colaborador: Jorge Morales Linares

Esta función busca en las tablas que pase el programador como parámetro. Cómo último parámetro de la función se debe pasar el criterio
de búsqueda, la frase. Esta función asume que ya se validaron los datos para que quede almacenado en un array las palabras a buscar.

Explicación:

Si el programador hace lo siguiente:

$encon=buscar('archivos','contactos','direcciones','subcategorias',$palabra);

Está diciendo busque en las tablas de una db llamadas 'archivos','contactos','direcciones','subcategorias' el criterio de búsqueda
contenido en $palabra, donde $palabra puede ser un array o simplemente una palabra.

El resultado de la búsqueda queda guardado en $encon(es un array multidimensional), y arroja: la tabla donde se encontró la coincidencia, el id del registro, y el 
campo que conincidió.

Para mostrar los datos se debe llamar así:
echo $encon[0]['tabla']." ".$encon[0]['id']." ".$encon[0]['campo'];

Donde 'tabla' es el nombre de la tabla donde se encontró la coincidencia, su respectivo 'id' y 'campo' el campo que coincidió. 0(cero)
quiere decir que muestre en su posición cero, osea que para varios registros debe hacer un ciclo repetitivo cargando el indice de la 
matriz en la variable correspondiente:

//contar cuantos registros encontró;
$num_encontradas=count($encon);
//Ya se puede realizar el ciclo
for($x=0;$x<$num_encontradas;$x++)
{
    echo $encon[$x]['tabla']." ".$encon[$x]['id']." ".$encon[$x]['nomcampo']."<br>";
}

Creo que no es más...
*/
include("conexion_db.php");

function 
buscar()
{
    
//la variable $db es para realizar las consultas que vienen de conexion_db.php, para mi caso la necesitaba así. Pueden cambiar
    //la manera de conexión
    
global $db;
    
    
$f=0;
    
//obtener el número de parámetros
    
$num_parametros=func_num_args();    
    
//obtener el último parámetro para saber  cual fue la frase clave
    
$id_frase=$num_parametros-1;    
    
//con el número del parámetro, obtengo el nombre del parámetro que lo guardo en la variable $palabra
    
$palabra=func_get_arg($id_frase);    
    
//establecer en una matriz ordenada los parámetros llamada $nombre_tabla
    
$nombre_tabla=func_get_args();
    
//conexión a la DB
    
$link=conexiondb();
    
//si conecta
    
if($link!=1)
    {
        
//un ciclo for para buscar mientras el numero de tablas -1, -1 por que el último parámetro no es una tabla sino el criterio
        
for ($id_tabla 0$id_tabla $num_parametros-1$id_tabla++) 
        {     
            
//la consulta para traer todos los campos de esta tabla            
            
$i=0;
            foreach(
$palabra as $pal)
            {
                
//convierto en minúsculas las parámetros
                
$nombre_tabla[$id_tabla]=strtolower($nombre_tabla[$id_tabla]);
                
                
$sql="SHOW FIELDS FROM ".$nombre_tabla[$id_tabla];            
                
$ras=$db["mq"]($sql);
                
$numero_atributos=$db["nr"]($ras);
                
//echo "Tabla: ".$nombre_tabla[$id_tabla]."---".$pal."ºººººººººººººººººººº<br>";
                
while($raw=$db["fa"]($ras))
                {
                    
//echo $raw[0]." --> ".$pal."<br>";
                    
if($i==0)
                    {
                        
//echo "enta la primera vez!!!!!!!!!!!!!!!!!!!!!<br>";
                        
$criterio=$raw[0]." like '%$pal%'";                        
                    }
                    else
                    
//else if($i==$numero_atributos-1)
                    
{
                        
$criterio.=" or ".$raw[0]." like '%$pal%'";
                    }
                    
$i++;
                }
                
$i=0;
                
//echo "Tabla:la parte: ".$criterio."<br>";
                /*echo "Completa la consulta: SELECT * FROM ".$nombre_tabla[$id_tabla]." WHERE ".$criterio;
                echo "<br>";*/
                
$concon="SELECT * FROM ".$nombre_tabla[$id_tabla]." WHERE ".$criterio;
                
$raz=$db["mq"]($concon);
                while(
$razz=$db["fa"]($raz))
                {
                    
//echo "HUBO CONSULTA: ".$razz[0]." ".$razz[1]." ".$razz[2]."<br>";
                    //esta es la matriz donde queda almacenada la tabla donde pertenece el campo y su id...
                    
$matriz[$f]['tabla']=$nombre_tabla[$id_tabla];
                    
$matriz[$f]['id']=$razz[0];
                    
$matriz[$f]['nomcampo']=mysql_field_name($raz,0);
                    
//echo $matriz[$f]['tabla']." -|||||- ".$matriz[$f]['id']." -|||||- ".$matriz[$f]['nomcampo']."<br>";                
                    
$f++;                    
                }
                
//$numero_atributos=$db["nr"]($ras);
            
}
            
//echo "<br><br>";            
           
}
        
//retorno la matriz
        
return $matriz;
    }
}
?>
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com