首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则2 DQL案例在计数时

原则2 DQL案例在计数时
EN

Stack Overflow用户
提问于 2014-07-04 15:30:10
回答 2查看 26.6K关注 0票数 11

我在原生MySQL代码中有这个查询

代码语言:javascript
复制
SELECT *
FROM `turn`
LEFT JOIN (
    poi
) ON ( turn.id = poi.turn_id )
GROUP BY turn.id
ORDER BY count( case when poi.image = 1 then 1 else null end) DESC;

我需要在Doctrine 2 DQL中重新构建它

到目前为止,我的尝试是:

代码语言:javascript
复制
SELECT t, COUNT((CASE WHEN Bundle\Entity\Poi p.image = 1 then 1 ELSE NULL END)) AS num
FROM Bundle\Entity\Turn t
JOIN t.pois p
GROUP BY t.id
ORDER BY num DESC

我得到了这个错误:

An exception has been thrown during the rendering of a template ("[Syntax Error] line 0, col 99: Error: Expected end of string, got '.'") in Bundle:Admin:showTurnsFiltered.html.twig at line 75.

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-04 20:17:08

经过几个小时的尝试和搜索,我自己找到了它,它与这个DQL一起工作:

代码语言:javascript
复制
$dql = 'SELECT t, SUM(CASE WHEN p.image = 1 THEN 1 ELSE 0 END) AS numImage
                    FROM Bundle\Entity\Turn t
                    JOIN t.pois p
                    GROUP BY t.id
                    ORDER BY numImage DESC;  

重要的是,您需要使用SUM而不是COUNT

票数 17
EN

Stack Overflow用户

发布于 2014-07-04 15:56:37

您需要使用ResultSetMappingBuilder。它看起来像这样:

代码语言:javascript
复制
public function getTurn()
{
    $rsm = new ResultSetMappingBuilder($this->_em);

    $rsm->addRootEntityFromClassMetadata('Foo\BarBundle\Entity\Turn', 't');
    $rsm->addJoinedEntityFromClassMetadata('Foo\BarBundle\Entity\Poi', 'p', 't', 'poi', array('id' => 'poi_id'));       
    $rsm->addScalarResult('ImageCount', 'ImageCount');


    $sql = 'SELECT t.id, t.foo, t.bar,
            SUM(CASE WHEN p.image = 1 then 1 else null end) ImageCount,                
            FROM Turn t   
            INNER JOIN poi p ON t.id = p.turn_id                
            ORDER BY ImageCount DESC';
    $query = $this->_em->createNativeQuery($sql, $rsm);

    return $query->getScalarResult();
}

注意:您可能需要将$query->getScalarResult()更改为$query->getResult()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24568898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档