3

我有一个想在 Doctrine2 中使用的 SQL 查询。

我的查询转到数据库,执行GROUP BY用户状态和COUNT每个状态的用户数。

然后我试图将一个表加入COUNT所有用户并为每个州制作一个百分比。

return $this->getEntityManager()
            ->createQuery("
                SELECT COUNT(u.id) as total, 
                    (100*(COUNT( u.id ) /  total_users.total)) as percent
                FROM UserBundle:User u,
                    (SELECT COUNT(*) as total
                     FROM UserBundle:User) as total_users
                LEFT JOIN u.idUserEstado ue
                GROUP BY u.idUserEstado")
            ->getResult();

问题是,当我运行 Doctrine2 查询时出现异常:

[Semantical Error] line 0, col 397 near 
'(SELECT COUNT(': Error: Class '(' is not defined. 

教义不承认SELECTFROM条款。

4

3 回答 3

2

从子句上的选择不由学说2处理

关于教义的 jira 有一个已关闭(且不被接受)的功能请求:http: //www.doctrine-project.org/jira/browse/DDC-2793

DQL 是关于查询对象的。在 FROM 子句中支持子选择意味着 DQL 解析器无法再构建结果集映射(因为子查询返回的字段可能不再与对象匹配)。这就是为什么不能支持它的原因(仅在没有水合的情况下运行查询的情况下支持它是不可行的 IMO,因为这意味着查询解析需要依赖于执行模式)。

于 2015-01-10T03:52:00.720 回答
1
(SELECT COUNT( * ) as total FROM UserBundle:User) as total_users

COUNT(*)DQL 中可能不存在。试一试COUNT(u.id),结果会一样。您还可以在 EntityRepository 中尝试此操作:

$qb->select(array(
    'count(u.id) as total',
    '(100*(count(u.id)/total_users.total)) as percent',
    'select count(u.id) as total_users) as total_users'))
   ->from('UserBundle:User')
   ->leftJoin('u.idUserEstado','ue')
   ->groupBy('u.idUserEstado');

return $qb->getQuery()->getResult();

来源:谷歌用户组问题

于 2012-06-21T11:52:17.047 回答
0

...  FROM UserBundle:User u, ...

很奇怪。也许它找不到类用户。

于 2012-06-21T11:46:58.590 回答