如何找到比数据库中给出的第一个更低的日期。 如果这个日期不存在,我需要查找日期 - 比数据库中的日期还晚30天我需要得到第一个更低的日期。从数据库中获取日期或第一个更低的日期
2017-08-30
2017-08-23
2017-08-16
2017-08-09
2017-08-02
2017-07-26
2017-07-19
比如我今天的数据
2017年8月30日
所以我需要找到日期-30天,从2017年8月30日
(将会是31.07.2017)
如果在数据库中不存在这个数据我需要第一下日期比2017年7月31日
所以这个日期将是2017年7月26日
我想:
$lastMonth = date_format(new \Datetime('-30 days'), 'Y-m-d');
for($i= 0; $i<7;){
$parts = explode('-', $lastMonth);
$lastMonth = date('Y-m-d', mktime(0, 0, 0, $parts[1], $parts[2] - $i, $parts[0]));
$query = $this->em->createQuery(
'SELECT sum(psc.score)/COUNT(psc.id) as avgscore, psc.date
FROM AppBundle:PageSpeedScore psc
WHERE psc.projectId = :projectId
AND psc.date = :date
GROUP BY psc.date, psc.projectId
ORDER BY psc.date
'
)->setParameter('projectId', $projectId)
->setParameter('date', $lastMonth);
if(empty($query->getResult())){
$i++;
}else{
$date = $query->getResult();
break;
}
}
This return me 2017-07-26所以它的工作,但...这是不是优雅的方式来做到这一点我认为。 我现在对数据库有很多查询。我想我可以用一个查询来完成。也许有人可以帮助我,告诉我如何在没有for循环的情况下在mySQL查询中执行此操作?
当前代码的结果是什么? –
当前代码返回我所需要的,但它不是优雅的方式我想要找到更多的性能方式像一个查询 – johnyT