Foros del Web » Programando para Internet » PHP »

Ciclos anidados en php

Estas en el tema de Ciclos anidados en php en el foro de PHP en Foros del Web. Saludos. Hola a todos. Estoy trabajando en una consulta o más bien en varias consulatas haciendo uso del anidamiento de ciclos. Aquí les muestro el ...
  #1 (permalink)  
Antiguo 23/05/2011, 07:27
 
Fecha de Ingreso: agosto-2005
Mensajes: 152
Antigüedad: 18 años, 8 meses
Puntos: 0
Ciclos anidados en php

Saludos.
Hola a todos.
Estoy trabajando en una consulta o más bien en varias consulatas haciendo uso del anidamiento de ciclos. Aquí les muestro el código:
Código PHP:
<?php

/**
 * @author Ernesto
 * @copyright 2011
 */

include ("conexion/conexion.php");
mssql_query("SET ANSI_NULLS ON");
mssql_query("SET ANSI_WARNINGS ON");
set_time_limit("120");

$_pagi_empresa mssql_query("SELECT     Empresas.DEMPRESA AS NEMPRESA
FROM         Sector RIGHT OUTER JOIN
                      Mod444 ON Sector.SECTOR = Mod444.SECTOR LEFT OUTER JOIN
                      Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN
                      Programa ON Mod444.PROGRAMA = Programa.PROGRAMA LEFT OUTER JOIN
                      Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN
                      Empresas ON Mod444.EMPRESA = Empresas.EMPRESA
GROUP BY Empresas.DEMPRESA
ORDER BY Empresas.DEMPRESA"
);


$total mssql_num_rows($_pagi_empresa);
if (
mssql_num_rows($_pagi_empresa)){
echo 
"Fecha Reporte :".date("m/d/y");
echo 
"<br>";
echo 
"<table> \n";
echo 
"<tr>
<th>Empresa</th>
<th>Sector</th>
<th>Municipio</th>
<th>Programa</th>
<th>Indicador</th>
<th>Plan Mes</th>
<th>Real Mes</th>
<th>Porciento</th>
<th>Plan Acumulado</th>
<th>Real Acumulado</th>
<th>Porciento Actual</th>
<th>Real Año Anterior</th>
<th>Plan Año Actual</th>
<th>Relación</th></tr>\n"
;
while (
$registro mssql_fetch_array($_pagi_empresa))
 {
//mssql_data_seek($_pagi_sql, $i);
//$row = mssql_fetch_array($_pagi_sql);
$_nempresa $registro["NEMPRESA"];
echo 
"<tr><td>".$registro["NEMPRESA"]."</td>";
/*"<td>".$registro["DSECTOR"]."</td>".
"<td>".$registro["DPROGRAMA"]."</td>".
"<td>".$registro["DMUNI"]."</td>".
*/
"</td></tr> \n";
$_pagi_sector mssql_query("SELECT     Empresas.DEMPRESA AS NEMPRESA, Sector.DSECTOR
FROM         Sector RIGHT OUTER JOIN
                      Mod444 ON Sector.SECTOR = Mod444.SECTOR LEFT OUTER JOIN
                      Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN
                      Programa ON Mod444.PROGRAMA = Programa.PROGRAMA LEFT OUTER JOIN
                      Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN
                      Empresas ON Mod444.EMPRESA = Empresas.EMPRESA
GROUP BY Empresas.DEMPRESA, Sector.DSECTOR
ORDER BY Empresas.DEMPRESA"
);
while (
$reg_sector mssql_fetch_array($_pagi_sector))
{
$_dsector $reg_sector["DSECTOR"];
echo 
"<tr><td>".$reg_sector["DSECTOR"]."</td>";
"</td></tr> \n";
$_pagi_mcpio mssql_query("SELECT     Empresas.DEMPRESA AS NEMPRESA, Sector.DSECTOR, Municipios.DMUNI
FROM         Sector RIGHT OUTER JOIN
                      Mod444 ON Sector.SECTOR = Mod444.SECTOR LEFT OUTER JOIN
                      Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN
                      Programa ON Mod444.PROGRAMA = Programa.PROGRAMA LEFT OUTER JOIN
                      Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN
                      Empresas ON Mod444.EMPRESA = Empresas.EMPRESA
GROUP BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI
ORDER BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI"
);
while (
$reg_mcpio mssql_fetch_array($_pagi_mcpio))
{
$_dmuni $reg_mcpio["DMUNI"];     
echo 
"<tr><td>&nbsp;</td><td>&nbsp;</td><td>".$reg_mcpio["DMUNI"];
echo 
"</td></tr> \n";
// Programas
$_pagi_prog mssql_query("SELECT     Empresas.DEMPRESA AS NEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA
FROM         Sector RIGHT OUTER JOIN
                      Mod444 ON Sector.SECTOR = Mod444.SECTOR LEFT OUTER JOIN
                      Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN
                      Programa ON Mod444.PROGRAMA = Programa.PROGRAMA LEFT OUTER JOIN
                      Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN
                      Empresas ON Mod444.EMPRESA = Empresas.EMPRESA
GROUP BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA
ORDER BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA"
);
while (
$reg_prog mssql_fetch_array($_pagi_prog))
{
$_dprograma $reg_prog["DPROGRAMA"];     
echo 
"<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>".$reg_prog["DPROGRAMA"];
echo 
"</td></tr> \n";
// Los Indicadores
$_pagi_ind mssql_query("SELECT     Empresas.DEMPRESA AS NEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA, Filas444.[Desc] AS Descrip, 
                      Mod444.[PLAN MES] AS PlanMes, Mod444.[REAL MES] AS RealMes, Mod444.PORC, Mod444.[PLAN ACUM] AS PlanAcum, 
                      Mod444.[REAL ACUM] AS RealAcum, Mod444.[PORC AC] AS PorcAC, Mod444.[REAL AÑO ANT] AS RealAA, Mod444.[PLAN AÑO ACT] AS PlanAA, 
                      Mod444.REL
FROM         Sector RIGHT OUTER JOIN
                      Mod444 ON Sector.SECTOR = Mod444.SECTOR LEFT OUTER JOIN
                      Filas444 ON Mod444.FILA = Filas444.Filas LEFT OUTER JOIN
                      Programa ON Mod444.PROGRAMA = Programa.PROGRAMA LEFT OUTER JOIN
                      Municipios ON Mod444.MUNI = Municipios.MUNI LEFT OUTER JOIN
                      Empresas ON Mod444.EMPRESA = Empresas.EMPRESA
GROUP BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA, Filas444.[Desc], Mod444.[PLAN MES], Mod444.[REAL MES], 
                      Mod444.PORC, Mod444.[PLAN ACUM], Mod444.[REAL ACUM], Mod444.[PORC AC], Mod444.[REAL AÑO ANT], Mod444.[PLAN AÑO ACT], Mod444.REL, 
                      Filas444.Filas HAVING      (Empresas.DEMPRESA = 'CONSOLIDADO EMPRESAS') AND (Municipios.DMUNI = 'BARACOA') AND (Programa.DPROGRAMA = 'CONSOLIDADO PROVINCIAL')  ORDER BY Empresas.DEMPRESA, Sector.DSECTOR, Municipios.DMUNI, Programa.DPROGRAMA, Filas444.Filas"
); 
while (
$reg_ind mssql_fetch_array($_pagi_ind))
{
echo 
"<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>".$reg_ind["Descrip"];
echo 
"<td>".$reg_ind["PlanMes"]."</td>";
}
}
}
}
// "</td></tr> \n";
}
}
echo 
"</table> \n";

?>
En qué consiste?. La primera consulta que aparece muestra solamente un registro que es el consolidado de la empresa. La otra devuelve uno solo, que es consolidado del sector, la otra muestra el nombre del municipio y la última muestra el programa. Aquí es dónde tengo el problema.
Lo que quiero hacer es algo al estilo de los informes que genera, por ejemplo, access. En este caso al ir pasando de página a página debe mantenerse el emcabezado de e ir cambiando el Municipio, el Programa y el valor de los Indicadores por cada uno de ellos, es decir no el nombre de los indicadores, sino el valor, los indicadores son los mismos. Slolo cambia el valor.
De la manera que esta hecho, la que muestro anteriormente, se repiten los mismos valores de los indicadores para un solo municipio, los demás no salen.
Espero me hayan enetendido.
Disculpen por lo largo de el código.
Muachas Gracias.
  #2 (permalink)  
Antiguo 23/05/2011, 07:46
Avatar de historiasdemaria  
Fecha de Ingreso: septiembre-2010
Ubicación: www
Mensajes: 433
Antigüedad: 13 años, 6 meses
Puntos: 54
Respuesta: Ciclos anidados en php

Me parece que lo que intentas hacer es un maestro/detalle o algo asi, o sea un master data que se muestra en la cabecera con los detalles de los datos relacionados despues.
Veo que hay tres o cuatro bucles anidados en consultas sql.

Divide y conquista, separa aun poco las cosas y construye arrays asociativos y luego vas verificando lo que muestras paso a paso

Etiquetas: anidados, ciclos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:42.