带有GroupBy的Doctrine / SQL查询MAX

时间:2017-06-12 21:58:37

标签: php mysql symfony doctrine-orm

我的目标是选择具有最高createdAt的列,按用户分组。

如果我执行以下操作:

$qb = $this->createQueryBuilder('qb1');
$q = $qb
  ->select('pbs, MAX(pbs.createdAt) AS HIDDEN pbs_created')
  ->add('from', 'MyEntity pbs')
  ->groupBy('pbs.user')
  ->orderBy('pbs_created', 'ASC')
  ->getQuery();
return $q->getResult();

我明白了:

+------+---------------------+---------------------+--------------+
| id_0 | createdAt_3         | sclr_5              | project_id_7 |
+------+---------------------+---------------------+--------------+
| 2137 | 2014-10-07 10:52:29 | 2017-04-25 15:42:42 |          116 |
+------+---------------------+---------------------+--------------+
+------+---------------------+---------------------+--------------+
| 5123 | 2015-11-02 15:02:55 | 2017-05-02 05:36:18 |          118 |
+------+---------------------+---------------------+--------------+

问题是我得到了最大值,但返回的行不包含最大值

如何获得具有相关实体数据的用户分组的最新createdAt?

2 个答案:

答案 0 :(得分:1)

订购时没有任何东西。 MAX()为您提供最大值,但不是具有最大值的行

看看这些SO问题

问题是 - 使用Doctine的QueryBuilder很难实现这两种解决方案。 但是可以使用子查询 - http://melikedev.com/2013/06/07/php-doctrine-dql-select-subquery/

答案 1 :(得分:0)

您是否尝试过更改订单? 像这样:

->orderBy('pbs_created', 'DESC')