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;
}
?>