【问题标题】:Add select COUNT events in common between the current user and the others in DQL query在 DQL 查询中添加当前用户和其他用户之间共有的 select COUNT 事件
【发布时间】:2021-01-04 10:56:51
【问题描述】:

我在 Symfony 4 项目中有这个 DQL 查询,它确实选择了与当前用户在所有相同事件中注册的所有用户

$query = $this->_em->createQuery(
    "select u as user, er.dateRegistration from App:EventRegistration er 
     left join App:User u with er.user = u.id
     where er.user != :user_id and 
     er.event in (select identity(er2.event) from App:EventRegistration er2 
     where er2.user = :user_id)")
->setParameter('user_id', $user->getId());

return $query->getResult();

现在,在同一个查询中,我想选择 COUNT 每个其他用户在当前用户的同一事件中注册了多少次。

我的意思是当前用户和其他用户之间共同的事件数。

如果我将 count(er.id) 添加到选择中

select u as user, er.dateRegistration, count(er.id)

我收到此错误:

SQLSTATE[42803]: 分组错误: 7 ERREUR: la colne « u0_.username » doit apparaître dans la Clause GROUP BY ou doit être utilisé dans une fonction d'agrégat 第 1 行:选择 u0_.username AS username_0, u0_.username_canonical AS..

【问题讨论】:

    标签: postgresql doctrine symfony4 dql


    【解决方案1】:

    您需要添加分组依据;

    $query = $this->_em->createQuery(
      "select u as user, count(er.id) as register_count from App:EventRegistration er 
      left join App:User u with er.user = u.id
      where er.user != :user_id and 
      er.event in (select identity(er2.event) from App:EventRegistration er2 
      where er2.user = :user_id) group by u.id")
    ->setParameter('user_id', $user->getId());
    
    return $query->getResult();
    

    它将为您提供每个用户的注册计数,但在这种情况下,您不能公开“er.dateRegistration”,因为现在您正在为每个用户分组计数。

    【讨论】:

    • 当我添加 count 时,我得到一个错误,我认为它与 psotgresql 有关:SQLSTATE[42803]: Grouping error: 7 ERREUR: la colonne « u0_.username » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat LINE 1: SELECT u0_.username AS username_0, u0_.username_canonical AS...
    • 您是否在查询末尾添加了“group by u.id”
    • 不,我忘记了,但即使我添加 group by u.id 而不添加 count(er.id) 我也会遇到同样的错误。
    • 您不应该删除 count(er.id),只需尝试将我的答案复制并粘贴到上面
    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 2011-12-07
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多