Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/12/2012, 14:28
cesar_viridi
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 10 meses
Puntos: 6
PHP y consulta de mysql con calculos muy lento

Hola a todos hace tiempo que no tengo problemas con esto pero explico lo que estoy haciendo tengo dos tablas sql con la misma estructura una con 3,000 registros y otra 5,000 registros,cree una vista que une ambas tablas con un UNION ahí todo bien ahora bien
tengo que sacar reportes de esta vista por lo cual tengo la siguiente estructura

id_empresa | empresa |mes | total
1 | uno |1 | 500000
1 | uno |1 | 5000
2 | dos |1 | 300000

asi sucesivamente para 8,000 registros

Tengo que hacer reportes de aquí con la siguiente estructura

empresa | Enero | Febrero | Marzo | Abril | Agosto| Noviembre | Diciembre
1 | 2000 | 30121 |5000 |6065|5450 |54068 |7000
2 | 4055 | 40121 |5000 |6065|5450 |54068 |7000
3 | 2089 | 80121 |5000 |6065|5450 |54068 |7000
4 | 3580 | 90121 |5000 |6065|5450 |54068 |7000

Entonces hize lo siguiente


Código PHP:
Ver original
  1. <table width="100%" border="1" cellspacing="0">
  2.     <thead>
  3.         <tr>
  4.             <th>Emisor</th>
  5.             <?
  6.             $meses = mysql_query("SELECT mes,anio FROM meses WHERE anio = 2012");//Saco los meses de una tabla para poderlos poner en las cabezeras
  7.             $m_ulti = mysql_query("SELECT count(mes) as ultimo FROM meses WHERE anio = 2012");
  8.             $m_ulti = mysql_fetch_array($m_ulti);
  9.             $m_ulti=$m_ulti['ultimo'];//saco el ultimo mes para el ciclo
  10.             while ($m=mysql_fetch_array($meses)) {// imprimo las cabeceras que son los meses
  11.                 ?>
  12.                 <th><?= $m['mes'];?></th>
  13.                 <?
  14.             }
  15.             ?>
  16.         </tr>
  17.     </thead>
  18.     <tbody>
  19.         <?php
  20.         for ($x=1; $x <=8 ; $x++) { // hago el ciclo de las 8 empresas
  21.             $emi = mysql_query("SELECT emisor FROM emisores WHERE id_emisor = $x");//Obtengo el nombre de la empresa
  22.             $emi=mysql_fetch_array($emi);//El nombre de la empresa lo guardo en una variable
  23.             ?>
  24.             <tr>
  25.                 <td>
  26.                 <?php echo $emi['emisor'];// Lo imprimo en la primera columna ?>
  27.                 </td>
  28.                 <?
  29.                 for ($n=1; $n <=$m_ulti ; $n++) { //empiezo el ciclo para los meses y empezar a calcular los totales por empresa y por mes
  30.                     $importe = mysql_query("SELECT sum(saldo_pendiente) as imp FROM factura_general WHERE id_emisor = $x and mes = $n and anio=2012");
  31.                     $imp = mysql_fetch_array($importe);// guardo el resultado en esta variable
  32.                     ?>
  33.                     <td><? echo $imp['imp'];// La imprimo ?></td>
  34.                     <?
  35.                 }
  36.                 ?>
  37.             </tr>
  38.             <?php//Cierro el tr para que empieze la otra fila
  39.         }
  40.         ?>
  41.     </tbody>
  42. </table>

Pero esto se tarda mucho que me sale el fatal_error por el tiempo máximo de ejecución que se supera que son 30 seg

Que podría hacer para acelerar esta consulta ya que tarda mas de 30 seg??

Gracias

Saludos