Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2013, 12:24
Avatar de jandrogdz
jandrogdz
 
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 11 años, 9 meses
Puntos: 12
Pregunta Duda para generar reportes

Buen día foro

Tengo una duda al momento de hacer reportes. Espero me puedan aconsejar cual es la mejor opcion:

Tengo dos metodos uno que hace la condicion y otro que hace las consultas:

Código PHP:
Ver original
  1. public function condicion($k){
  2.         $where = '';
  3.         $inicio = true;
  4.         if(isset($k['desde']) && $k['desde'] != "" && isset($k['hasta']) && $k['hasta'] != ""):
  5.             $where.=($inicio)?" WHERE f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'" : "AND f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'";
  6.             $inicio = false;  
  7.         endif;
  8.         if(isset($k['cliente']) && $k['cliente'] != ""):
  9.             $where.=($inicio)?" WHERE c.cliente='".$k['cliente']."'":" AND c.cliente='".$k['cliente']."'";
  10.             $inicio = false;
  11.         endif;
  12.         if(isset($k['asociado']) && $k['asociado'] != ""):
  13.             if($k['asociado'] != 4):
  14.                 $where.=($inicio)?" WHERE a.asociadoID='".$k['asociado']."'":" AND a.asociadoID='".$k['asociado']."'";
  15.                 $inicio = false;
  16.             endif;    
  17.         endif;
  18.         if(isset($k['estado']) && $k['estado'] != ""):
  19.             if($k['estado'] == "Todos"):
  20.                 $where.=($inicio)? " WHERE f.status='Pagada' OR f.status='Pendiente' OR f.status='Cancelada' ":" AND f.status='Pagada' OR f.status='Pendiente' OR f.status='Cancelada'";
  21.                 $inicio = false;
  22.             else:
  23.                 $where.=($inicio)? " WHERE f.status='".$k['estado']."'":" AND f.status='".$k['estado']."'";
  24.                 $inicio = false;
  25.             endif;
  26.         endif;
  27.         if(isset($k['agrupar']) && $k['agrupar'] != ""):
  28.             if($k['asociado'] != 4):
  29.                 $where.=($k['agrupar'] == 1) ? " GROUP BY c.cliente WITH ROLLUP":"";
  30.             endif;
  31.         endif;
  32.         return $where;
  33.     }
  34.    
  35.     public function datosFiltro($k){
  36.         $condicion = $this->condicion($k);
  37.         $meses = array(1=>"ene",2=>"feb",3=>"mar",4=>"abr",5=>"may",6=>"jun",7=>"jul",8=>"ago",9=>"sep",10=>"oct",11=>"nov",12=>"dic");
  38.         // CONSULTA...
  39.         if($k['asociado'] != 4):
  40.             $query = "SELECT  c.cliente, f.status, ";
  41.             for($j = 1; $j <= 12; $j++):
  42.                 $query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";  
  43.             endfor;
  44.             $query.=" SUM(f.totalFactura) totalgral ";
  45.             $query.= $k['asociado'] == 1 ? "FROM facturaX f ": "FROM facturaY f ";
  46.             $query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
  47.             $query.= $condicion;
  48.             return $query;
  49.         else:
  50.             $query = "SELECT  c.cliente, f.status, ";
  51.             for($j = 1; $j <= 12; $j++):
  52.                 $query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";  
  53.             endfor;
  54.             $query.=" SUM(f.totalFactura) totalgral ";
  55.             $query.=" FROM facturaX f ";
  56.             $query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
  57.             $query.= $condicion." AND (a.asociadoID='1') GROUP BY c.cliente WITH ROLLUP";
  58.             $query.=" UNION ";
  59.             $query.= "SELECT  c.cliente, f.status, ";
  60.             for($j = 1; $j <= 12; $j++):
  61.                 $query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";  
  62.             endfor;
  63.             $query.=" SUM(f.totalFactura) totalgral ";
  64.             $query.=" FROM facturaY f ";
  65.             $query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
  66.             $query.= $condicion." AND (a.asociadoID='2' OR a.asociadoID='3') GROUP BY c.cliente WITH ROLLUP ";
  67.             return $query;
  68.         endif;
  69.     }

Mi duda cual es la mejor opcion para manejar las consultas:
Hacer las consultas por separado o generar todo como lo tengo en ese ejemplo?

Espero me puedan apoyar.
De antemano muchas gracias.
__________________
Lo imposible solo cuesta un poco mas