在 DQL 查询中添加 select 个当前用户与其他用户共有的事件
Add select COUNT events in common between the current user and the others in DQL query
我在 Symfony 4 项目中有这个 DQL 查询,它 select 所有在与当前用户相同的事件中注册的用户
$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();
现在,在同一查询中,我想 select COUNT 每个其他用户在同一事件中注册了多少次当前用户。
我指的是当前用户和其他用户共同事件的数量。
如果我将 count(er.id) 添加到 select
select u as user, er.dateRegistration, count(er.id)
我收到这个错误:
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..
您需要添加分组依据;
$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”,因为现在您正在为每个用户分组计数。
我在 Symfony 4 项目中有这个 DQL 查询,它 select 所有在与当前用户相同的事件中注册的用户
$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();
现在,在同一查询中,我想 select COUNT 每个其他用户在同一事件中注册了多少次当前用户。
我指的是当前用户和其他用户共同事件的数量。
如果我将 count(er.id) 添加到 select
select u as user, er.dateRegistration, count(er.id)
我收到这个错误:
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..
您需要添加分组依据;
$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”,因为现在您正在为每个用户分组计数。