Php 带日期的Symfony2实体,计算每天的平均值
我有一个实体金额 与 还有更多的领域 我想计算每天的平均值 现在我为每天创建一个约会时间Php 带日期的Symfony2实体,计算每天的平均值,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有一个实体金额 与 还有更多的领域 我想计算每天的平均值 现在我为每天创建一个约会时间 $date=new \DateTime(); $yesterday = new \ DateTime(); $yesterday->modify("- 1 day"); $beforeYesterday = new \ DateTime(); $beforeYesterday->modify("- 2 days"); ... 我循环了所有
$date=new \DateTime();
$yesterday = new \ DateTime();
$yesterday->modify("- 1 day");
$beforeYesterday = new \ DateTime();
$beforeYesterday->modify("- 2 days");
...
我循环了所有的数量
$averageCounts=[];
foreach ($amounts as $amount) {
if($amount->getCreatedAt()->format("d.m.Y") == $date->format("d.m.Y") ){
$averageCounts['today'] += $amount->getValue();
}
if($amount->getCreatedAt()->format("d.m.Y") == $yesterday->format("d.m.Y") ){
$averageCounts['yesterday'] += $amount->getValue();
}
}
$averagePerDay = ($averageCounts['today'] + $averageCounts['yesterday']) / count($averageCount) ;
所以我不能继续这样下去,有人能给我指出一种计算每天平均值的优雅方法吗 我建议您使用
分组方式
,这样您将拥有下一个sql:
从表中选择平均值(t.value)、t.create\u at作为t分组依据(t.create\u at)
在存储库中,您可以在dql
中进行翻译:
$q = $em->createQuery();
$dql = "select AVG(t.value), DAY(t.createdAt)
cdate from MyProject\Model\Table t WHERE t.type=:param GROUP BY cdate";
$q->setDql($dql)->setParameter('param', $param);
很高兴帮助你!祝你好运
其中t.type=:param
和在$q->setDQL($dql)->setParameter('param',$param)
hm抱歉它似乎不起作用,我认为按t.createdAt分组
需要格式化为d.m.Y
,现在它返回一个包含18个条目的数组(所有金额的计数),而不是每天一个数组(3天)我想我必须使用内置的DAY()函数,但是当我使用groupbyday(t.createdAt)
时,它会抛出错误'line 0,col78'DAY(t.createdAt)':错误:无法根据未定义的标识或结果变量进行分组。`做了一些修改,你能试试这个吗
$q = $em->createQuery();
$dql = "select AVG(t.value), DAY(t.createdAt)
cdate from MyProject\Model\Table t WHERE t.type=:param GROUP BY cdate";
$q->setDql($dql)->setParameter('param', $param);