Я не понимаю, как перевести этот запрос в синтаксис структуры zend, любая помощь будет оценена.
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;
Я мог бы построить запрос, и он будет выглядеть следующим образом.
$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;