分组超过一岁

时间:2013-07-22 18:05:25

标签: doctrine

我有一个prodcut存档列表,我正在使用dotrine和symfony,我希望显示存档产品列表:

   $query = Doctrine::getTable('Product')
            ->createQuery('a')
            ->select('a.created_at, YEAR(a.created_at) as year, MONTH(a.created_at) as month')
            ->groupBy('year, month')
            ->orderBy('a.created_at DESC')
            ->setHydrationMode(Doctrine_Core::HYDRATE_ARRAY)
            ->execute();

所以我希望更改查询,这样当超过1年时,它应该按年份对产品进行分组?

修改

我添加了这个,但我想这不适用于学说1:

->andWhere("year <= DATE_ADD(CURRENT_DATE(), 1, 'YEAR')")

我收到此错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 'YEAR')

1 个答案:

答案 0 :(得分:0)

我认为您不能在单个选择中定义不同的groupBy子句。但是,您可以执行以下操作之一:

(1)构建2个独立查询 - 一个用于&gt; 1年,另一个用于&lt; 1年。然后,因为你正在使用array_merge来保护阵列,所以使用(2)

UNION使用SQL doctrine2合并两个查询的结果。很遗憾,UNION不支持SQL,因此您需要回归标准{{1}}(请参阅here

剩下的唯一开放点是,如果您希望两个查询的结果看起来相同,则需要在“超过1年”查询中添加月份的默认值。