我有一个产品存档列表,我正在使用 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')
我认为您不能在单个选择中定义不同的
groupBy
子句。但是,您可以执行以下操作之一:
(1)
构建 2 个独立查询 - 一个用于 >1 年,另一个用于 <1 year. Then, since you are hydrating to arrays anyway merge your arrays using array_merge
。
(2)
使用 SQL UNION
合并两个查询的结果。不幸的是,doctrine2
不支持UNION
,所以你需要回退到标准SQL
(参见这里)
剩下的唯一开放点是,如果您希望两个查询的结果看起来相同,则需要在“早于 1 年”查询中添加月份的默认值。