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
public function condicion($k){ $where = ''; $inicio = true; $where.=($inicio)?" WHERE f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'" : "AND f.fecha BETWEEN'".$k['desde']."' AND '".$k['hasta']."'"; $inicio = false; endif; $where.=($inicio)?" WHERE c.cliente='".$k['cliente']."'":" AND c.cliente='".$k['cliente']."'"; $inicio = false; endif; if($k['asociado'] != 4): $where.=($inicio)?" WHERE a.asociadoID='".$k['asociado']."'":" AND a.asociadoID='".$k['asociado']."'"; $inicio = false; endif; endif; 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($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.