0

我有一个产品存档列表,我正在使用 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')
4

1 回答 1

0

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

(1)构建 2 个独立查询 - 一个用于 >1 年,另一个用于 <1 年。然后,由于您无论如何都要对数组进行水合,因此使用array_merge.

(2)使用 SQLUNION合并两个查询的结果。不幸的是,doctrine2不支持UNION,所以你需要回退到标准SQL(见这里

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

于 2013-07-22T18:30:15.733 回答