Doctrine 2 - GROUP BY 两列,得到不正确的值
Posted
技术标签:
【中文标题】Doctrine 2 - GROUP BY 两列,得到不正确的值【英文标题】:Doctrine 2 - GROUP BY two columns, gets incorrect values 【发布时间】:2021-12-08 23:57:01 【问题描述】:在我的数据库中,我有与tasks
相关的表与user
表。
我想获取特定状态的任务列表,按用户和状态分组。
这是我的查询:
$this->createQueryBuilder('t')
->select('t.assignee, COUNT(t.id) as count, t.state')
->join('t.assignee', 'user')
->andWhere('t.state IN (:states)')
->setParameters([
'states' => array($states)
])
->addGroupBy('t.assignee')
->addGroupBy('t.state')
->getQuery()
->getResult()
不幸的是,该查询没有返回正确的记录。结果是每个用户只有一条记录,尽管它应该返回一个用户的一些记录,按任务类型排序。 你能帮我更正我的问题吗?
【问题讨论】:
【参考方案1】:你必须先设置groupBy方法,然后再使用addGroupBy方法。
您的代码将如下所示:
$this->createQueryBuilder('t')
->select('t.assignee, COUNT(t.id) as count, t.state')
->join('t.assignee', 'user')
->andWhere('t.state IN (:states)')
->setParameters([
'states' => array($states)
])
->groupBy('t.assignee')
->addGroupBy('t.state')
->getQuery()
->getResult()
【讨论】:
【参考方案2】:也将andWhere
更改为where
:
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('App:Entity')->createQueryBuilder('t');
$query
->select('t.assignee, COUNT(t.id) as count, t.state')
->join('t.assignee', 'user')
->where($query->expr()->in('t.state', array($states)))
->groupBy('t.assignee')
->addGroupBy('t.state')
->getQuery()
->getResult();
【讨论】:
以上是关于Doctrine 2 - GROUP BY 两列,得到不正确的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中将两列与 group by 相乘和求和
BigQuery 对两列使用 Group By 函数,顺序无关紧要
SQL使用group by获取SUM,但有条件地对两列之一的内容求和