【问题标题】:Doctrine: Group by date ranges原则:按日期范围分组
【发布时间】:2013-01-24 19:09:04
【问题描述】:

在我的 Symfony 应用程序中,我有一个实体“项目”,它包含两个字段:“createdOn”(类型 = 日期)和“个人”。一个人可以在“项目”中出现多次。

_created_On_|_individual_id
 2012.12.01 |     3
 2012.12.24 |     5
 2013.01.10 |     9

我正在尝试构建一个查询来计算按“createdOn”分组的所有不同个体,这样我就可以得到按月排序的结果。并且必须可以为查询设置日期范围。

到目前为止我的查询:

'SELECT p.createdOn, COUNT (DISTINCT p.individual) 
                FROM ...\DossierBundle\Entity\Project p
                WHERE p.createdOn
                BETWEEN :name1
                AND :name2' 
                )->setParameters(array(
                'name1' => $startDate,
                'name2' => $endDate,
                ))

这并不能完全让我得到下面想要的结果

_DATE____|_Number_of_Individuals
Dec 2012 | 2
Jan 2013 | 1

但是我得到了

__DATE_____|_Number_of_Individuals
2012.12.01 |     1
2012.12.24 |     1
2013.01.10 |     1 

Google 也没有帮助我,因此我们将不胜感激。

弗洛

【问题讨论】:

  • 你会得到什么结果?
  • @cheesemacfly 我已经添加了我的查询的当前结果。
  • 我觉得这个post 可能对你有帮助。

标签: symfony doctrine dql


【解决方案1】:

您需要使用自定义日期函数来扩展教义,并且要小心,因为您不能将 group by 与函数一起使用,所以您必须欺骗教义。

看看那个:

http://www.doctrine-project.org/blog/doctrine2-custom-dql-udfs.html

这里是一天原生mysql函数的例子:

https://github.com/beberlei/DoctrineExtensions/blob/master/lib/DoctrineExtensions/Query/Mysql/Day.php

并按问题为小组阅读并解决问题(使用 as):

http://www.doctrine-project.org/jira/browse/DDC-1236

我需要按日期(没有时间)对访问进行分组,所以我编写了带有日期扩展名的 dql 查询:

select count(v) as visit_count , DATE(v.created_at) as day_created_at from Shorten\Entity\Visit v group by day_created_at 

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 2021-11-16
    • 2013-05-19
    • 2010-10-31
    • 2016-09-22
    • 2019-02-19
    • 2019-02-14
    相关资源
    最近更新 更多