Javier Esquivel Javier Esquivel - 7 months ago 13
SQL Question

How can you translate this query into zend framework 2 syntax?

I haven't figure it out, how to translate this query into zend framework syntax, any help would be apreciated.

SELECT p.idProyecto,p.nombre, p.nombre, e.nombre, e.apellido, sum(Respuesta.estimado) as estimado, DATE_FORMAT(p.fechaInicio, '%Y/%m/%d') as inicio, DATE_FORMAT(p.fechaFin, '%Y/%m/%d') as fin, sum(DetailTotals.Total) as total
FROM Actividad as a
LEFT JOIN
(
SELECT a2.idActividad, sum(ar2.tiempoEstimado) as estimado
FROM actividadResponsable as ar2
JOIN actividad as a2 on ar2.idActividad=a2.idActividad
WHERE a2.fechaInicio>='2014-10-13' and a2.fechaInicio<='2014-10-19'
GROUP BY a2.idProyecto
) AS Respuesta ON Respuesta.idActividad=a.idActividad
LEFT JOIN ActividadPlaneada as ap On ap.idActividad = Respuesta.idActividad
LEFT JOIN tipoActividad as ta on ta.idTipoActividad= ap.idTipoActividad
LEFT JOIN proyecto as p ON p.idProyecto=a.idProyecto
LEFT JOIN
(
SELECT *, Sum(r2.tiempoRegistrado) As Total
FROM registro As r2
WHERE r2.fechaRegistro>='2014-10-13' and r2.fechaRegistro<='2014-10-19'
GROUP BY r2.idActividad
) As DetailTotals ON DetailTotals.idActividad=a.idActividad
LEFT JOIN Empleado AS e ON p.creador = e.idEmpleado
GROUP BY a.idProyecto;

Answer

I could actually built the query and it goes like this.

$left_join_1 = $sql->select();
$left_join_1->from(array('ar2' => 'ActividadResponsable'));
$left_join_1->columns(array(new \Zend\Db\Sql\Expression('a2.idActividad, sum(ar2.tiempoEstimado) as estimado')));
$left_join_1->join(array('a2' => 'Actividad'),  "ar2.idActividad=a2.idActividad", array());
$left_join_1->where->greaterThanOrEqualTo('a2.fechaInicio', $inicio);
$left_join_1->where->lessThanOrEqualTo('a2.fechaInicio', $fin);
$left_join_1->group(array('a2.idProyecto'));

$left_join_2 = $sql->select();
$left_join_2->from(array('r2' => 'Registro'));
$left_join_2->columns(array(new \Zend\Db\Sql\Expression('*, Sum(r2.tiempoRegistrado) as Total')));
$left_join_2->where->greaterThanOrEqualTo('r2.fechaRegistro', $inicio);
$left_join_2->where->lessThanOrEqualTo('r2.fechaRegistro', $fin);
$left_join_2->group(array('r2.idActividad'));

$query = $sql->select();
$query->from(array('a' => 'Actividad'));
$query->columns(array(new \Zend\Db\Sql\Expression('p.idProyecto,p.nombre, p.nombre, e.nombre, e.apellido, sum(Respuesta.estimado) as estimado, p.fechaInicio as inicio, p.fechaFin as fin, sum(DetailTotals.Total) as t_real')));
$query->join(array('Respuesta' => $left_join_1),   'Respuesta.idActividad=a.idActividad', array(), 'left');
$query->join(array('ap' => 'ActividadPlaneada'),   'ap.idActividad = Respuesta.idActividad', array(), 'left');
$query->join(array('ta' => 'TipoActividad'),   'ta.idTipoActividad= ap.idTipoActividad', array(), 'left');
$query->join(array('p' => 'Proyecto'),   'p.idProyecto=a.idProyecto', array(), 'left');
$query->join(array('DetailTotals' => $left_join_2),   'DetailTotals.idActividad=a.idActividad', array(), 'left');
$query->join(array('e' => 'Empleado'),   'p.creador = e.idEmpleado', array(), 'left');
$query->group(array('a.idProyecto'));
$statement = $sql->prepareStatementForSqlObject($query);
$result = $statement->execute();
$records = array();
foreach ($result as $return) {
  $records[] = $return;
}
return $records;