学说:按日期范围分组

时间:2013-01-24 19:09:05

标签: symfony doctrine dql

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

_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 

谷歌也没有帮助我,所以我们非常感谢任何支持。

弗洛

1 个答案:

答案 0 :(得分:0)

你需要使用自定义日期函数扩展学说,并且要小心,因为你不能使用group by with functions,所以你必须欺骗教条。

看看:

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 
希望它有所帮助。