Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2016, 16:36
binagol
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 16 años, 4 meses
Puntos: 6
consulta mysql con php en varias tablas y armar excel

Hola, tengo una duda, yo tengo varias tablas de mysql, y necesito armar un excel que contenga valores de varias de ellas.
antes que nada, aviso que lo que arme funciona, pero tarda muchisimo en armar el excel. supongo que alguien que sepa me podra dar alguna idea de como mejorarlo para que sea mas rapido. o por donde ver para que mejore

les detallo mejor:
tengo 3 tablas: afiliado, familia, aportes.

Yo en el excel tengo que tener: los familiares que estan dentro de cierta edad(los obtengo de tabla familia), con algunos datos de los padres( los obtengo de la tabla afiliado) y los aportes de los padres de ciertas fechas( los obtengo de la tabla aportes), hay una condicion mas, que es, que se puede haber dado de baja y alta dos veces el mismo afiliado (lo obtengo de afiliado) lo cual hace que este dos veces en aportes , en este caso, tambien, consulto los aportes del numero de afiliado anterior( lo obtengo de aportes)

ahora les paso el codigo que estoy usando alivianado para que se pueda ver lo que digo:
Se les ocurre alguna idea??
de antemano mil gracias!!!!
y Saludos

Código PHP:
<?
session_start
();

include(
'../../files/configuracion.php');//para la consulta mysql
require_once("../../excel/Classes/PHPExcel.php"); //para armar el excel
require_once("../../excel/Classes/PHPExcel/Writer/Excel2007.php");//para armar el excel

        

     //esto es el resultado de un formulario, las variables que uso para armar el excel (rango de edades que convierto en fechas de nacimiento para su busqueda)                
            
$afiliado1=addslashes($_POST['1']);
                
$edad1=$afiliado1;
                
$edad_num1=$edad1;

                
$afiliado2=addslashes($_POST['2']);
                
$edad2=$afiliado2;
                
$edad_num2=$edad2;
                
                
$ano_hoy=date('Y');
                
$mes_hoy=date('m');
                
$dia_hoy=date('d');
            
            
$ano_nac1=$ano_hoy-$edad_num1;
            
$mes_nac1=$mes_hoy;
            
$dia_nac1=$dia_hoy;
            
$edad_num1=$ano_nac1.$mes_nac1.$dia_nac1;

            
$ano_nac2=$ano_hoy-$edad_num2;
            
$mes_nac2=$mes_hoy;
            
$dia_nac2=$dia_hoy;
            
$edad_num2=$ano_nac2.$mes_nac2.$dia_nac2;                
        
        
$rs mysql_query("SELECT * FROM grupo_familiar WHERE fecha_nac_num>=$edad_num2 AND fecha_nac_num<=$edad_num1'") or die(mysql_error());
    if(
mysql_num_rows($rs)>0)
    {

            
                
//armo los encabezados de excel
                //objeto de PHP Excel
                
$objPHPExcel = new PHPExcel();
                
//algunos datos sobre autoría
                
$objPHPExcel->getProperties()->setCreator("misitio.COM");
                
                
            
$objPHPExcel->getActiveSheet()->SetCellValue("A1""Afiliado");
            
$objPHPExcel->getActiveSheet()->SetCellValue("B1""Afiliado");
            
$objPHPExcel->getActiveSheet()->SetCellValue("C1""Afiliado");
            
$objPHPExcel->getActiveSheet()->setCellValue("D1""Afiliado");
            
$objPHPExcel->getActiveSheet()->setCellValue("E1""Afiliado");
            
$objPHPExcel->getActiveSheet()->setCellValue("F1""Afiliado");
            
$objPHPExcel->getActiveSheet()->setCellValue("G1""Afiliado");            

            
//Trabajamos con la hoja activa principal
            
$objPHPExcel->setActiveSheetIndex(0);
            
$orden1=2;
        
//trabajo con los datos de la familia
        
while($pariente mysql_fetch_assoc($rs))
        {

            
$id=$pariente['id'];
            
$fecha_nac=$pariente['fecha_nacimiento'];
            
$nummero=$pariente['numermo_afiliado'];
            
$nombre=$pariente['nombre'];                     
              
$apellido=$pariente['apellido'];                                
            
$parentesco=$pariente['parentesco'];             
            
    

        

            
$error_busqueda_padre=0;

            
//levanto los datos del padre de afiliados
        
$datos_padre mysql_query("SELECT * FROM afiliado WHERE num_afiliado='$numero'") or die(mysql_error());
                if(
mysql_num_rows($datos_padre)>0){
                    
$error_busqueda_padre=1;
                    while(
$padre mysql_fetch_assoc($datos_padre))
                    {
                    
$nombre_padre=$padre['nombre'];
                    
$apellido_padre=$padre['apellido'];
                    
$sector_padre=$padre['sector'];
                    }    
                }
    
    
/// ahora consulto los aportes del padre
    
    
if(mysql_num_rows($datos_padre)==0){$error_busqueda_padre=2;}
        if(
$error_busqueda_padre==1)
        {
        
                    
$datos_aportes mysql_query("SELECT * FROM aportes WHERE numero_afiliado='$numero'") or die(mysql_error());
                            if(
mysql_num_rows($datos_aportes)>0)
                            {
                                while(
$aportes mysql_fetch_assoc($datos_aportes))
                                {

                                
$aporte1603=$aportes['2016_03'];
                                
$aporte1604=$aportes['2016_04'];
                                
$aporte1605=$aportes['2016_05'];
                                
$aporte1606=$aportes['2016_06'];
                                
$numero_doble_afil=$aportes['id_afil_baja_alta'];//// este valor me dice que tiene una baja y alta, para poder consultar los datos viejos
                                

                                
                                
if($numero_doble_afil!=0)
                                    {
                                    
$datos_aportes_doble mysql_query("SELECT * FROM aportes WHERE numero_afiliado='$numero_doble_afil'") or die(mysql_error());
                                    if(
mysql_num_rows($datos_aportes_doble)>0)
                                        {
                                            while(
$aportes_doble mysql_fetch_assoc($datos_aportes_doble))
                                            {
                                            
$aporte16032=$aportes_doble['2016_03'];
                                            
$aporte16042=$aportes_doble['2016_04'];
                                            
$aporte16052=$aportes_doble['2016_05'];
                                            
$aporte16062=$aportes_doble['2016_06'];
                                            }
                                        }
                                    
//aca tambien saco datos de afiliado con el numero anterior
                                    
$datos_padre_viejo mysql_query("SELECT * FROM afiliado WHERE num_afiliado='$numero_doble_afil'") or die(mysql_error());
                                    if(
mysql_num_rows($datos_padre_viejo)>0)
                                        {
                                        while(
$padre_viejo mysql_fetch_assoc($datos_padre_viejo))
                                            {
                                            if(
$padre_viejo['baja']==0){$fecha_baja_padre_viejo="NO";}else{$fecha_baja_padre_viejo="SI";}
                                            }
                                        }
                                    }
                                }
                            }    
                

                            

              
$orden1$orden1+1;
//aca completo el excel con todo lo que consulte, lo recorte para que sea mas legible.
                
$objPHPExcel->getActiveSheet()->SetCellValue("A".$orden1$num_afiliado);
                
$objPHPExcel->getActiveSheet()->setCellValue("B".$orden1$apellido_padre);              
                
$objPHPExcel->getActiveSheet()->setCellValue("C".$orden1$nombre_padre);              
                
$objPHPExcel->getActiveSheet()->setCellValue("E".$orden1$sector_padre);             
                
$objPHPExcel->getActiveSheet()->setCellValue("O".$orden1$aporte1603);    
                
$objPHPExcel->getActiveSheet()->setCellValue("S".$orden1$fecha_afil_padre);
                
$objPHPExcel->getActiveSheet()->setCellValue("t".$orden1$fecha_baja_padre);
                
$objPHPExcel->getActiveSheet()->setCellValue("u".$orden1$numero_doble_afil);
                
$objPHPExcel->getActiveSheet()->setCellValue("v".$orden1$fecha_baja_padre_viejo);
                
$objPHPExcel->getActiveSheet()->setCellValue("w".$orden1$aporte16032);
                
$objPHPExcel->getActiveSheet()->setCellValue("x".$orden1$aporte16042);
                
$objPHPExcel->getActiveSheet()->setCellValue("y".$orden1$aporte16052);
                
$objPHPExcel->getActiveSheet()->setCellValue("z".$orden1$aporte16062);

        }

            }


        
//Titulo del libro y seguridad 
        
$objPHPExcel->getActiveSheet()->setTitle('Busqueda');
        
$objPHPExcel->getSecurity()->setLockWindows(true);
        
$objPHPExcel->getSecurity()->setLockStructure(true);
        
        
        
// Se modifican los encabezados del HTTP para indicar que se envia un archivo de Excel.
        
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        
header('Content-Disposition: attachment;filename="busqueda.xlsx"');
        
header('Cache-Control: max-age=0');
        
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
        
$objWriter->save('php://output');
        exit;
    
    }
?>

Última edición por binagol; 07/08/2016 a las 20:48 Razón: corregi detalles