您如何将此查询转换为 zend 框架 2 语法? [英] How can you translate this query into zend framework 2 syntax?

查看:38
本文介绍了您如何将此查询转换为 zend 框架 2 语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还没有弄清楚,如何将这个查询翻译成 zend 框架语法,任何帮助将不胜感激.

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;

推荐答案

我实际上可以构建查询,它是这样的.

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;

这篇关于您如何将此查询转换为 zend 框架 2 语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆