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 originalpublic function condicion($k){
$where = '';
$inicio = true;
if(isset($k['desde']) && $k['desde'] != "" && isset($k['hasta']) && $k['hasta'] != ""): $where.=($inicio)?" WHERE f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'" : "AND f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'";
$inicio = false;
endif;
if(isset($k['cliente']) && $k['cliente'] != ""): $where.=($inicio)?" WHERE c.cliente='".$k['cliente']."'":" AND c.cliente='".$k['cliente']."'";
$inicio = false;
endif;
if(isset($k['asociado']) && $k['asociado'] != ""): if($k['asociado'] != 4):
$where.=($inicio)?" WHERE a.asociadoID='".$k['asociado']."'":" AND a.asociadoID='".$k['asociado']."'";
$inicio = false;
endif;
endif;
if(isset($k['estado']) && $k['estado'] != ""): if($k['estado'] == "Todos"):
$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'";
$inicio = false;
else:
$where.=($inicio)? " WHERE f.status='".$k['estado']."'":" AND f.status='".$k['estado']."'";
$inicio = false;
endif;
endif;
if(isset($k['agrupar']) && $k['agrupar'] != ""): if($k['asociado'] != 4):
$where.=($k['agrupar'] == 1) ? " GROUP BY c.cliente WITH ROLLUP":"";
endif;
endif;
return $where;
}
public function datosFiltro($k){
$condicion = $this->condicion($k);
$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"); // CONSULTA...
if($k['asociado'] != 4):
$query = "SELECT c.cliente, f.status, ";
for($j = 1; $j <= 12; $j++):
$query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";
endfor;
$query.=" SUM(f.totalFactura) totalgral ";
$query.= $k['asociado'] == 1 ? "FROM facturaX f ": "FROM facturaY f ";
$query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
$query.= $condicion;
return $query;
else:
$query = "SELECT c.cliente, f.status, ";
for($j = 1; $j <= 12; $j++):
$query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";
endfor;
$query.=" SUM(f.totalFactura) totalgral ";
$query.=" FROM facturaX f ";
$query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
$query.= $condicion." AND (a.asociadoID='1') GROUP BY c.cliente WITH ROLLUP";
$query.=" UNION ";
$query.= "SELECT c.cliente, f.status, ";
for($j = 1; $j <= 12; $j++):
$query.= "SUM(CASE WHEN MONTH(f.fecha) = ".$j." THEN f.totalFactura ELSE 0 END) ".$meses[$j].", ";
endfor;
$query.=" SUM(f.totalFactura) totalgral ";
$query.=" FROM facturaY f ";
$query.=" JOIN cliente c ON f.clienteID = c.clienteID JOIN asociado a ON c.asociadoID=a.asociadoID";
$query.= $condicion." AND (a.asociadoID='2' OR a.asociadoID='3') GROUP BY c.cliente WITH ROLLUP ";
return $query;
endif;
}
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.