Mysql 第2条原则DQL案件在计算时

Mysql 第2条原则DQL案件在计算时,mysql,symfony,doctrine-orm,dql,Mysql,Symfony,Doctrine Orm,Dql,我在原生MySQL代码中有这个查询 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; 我需要在条令2 DQL中重建它 到目前为止,我的尝试是: SELECT t, COUNT((CASE WHEN Bundle\Entity\Poi

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

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;
我需要在条令2 DQL中重建它

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

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
我得到了这个错误:

在第75行的Bundle:Admin:showTurnsFiltered.html.twig中呈现模板(“[Syntax Error]第0行,第99列:Error:Expected end of string,get.”)时引发异常。

我做错了什么?

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

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()

经过数小时的尝试和搜索,我自己找到了它,它正在使用此DQL:

$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(计数)

我不能使用NativeQuery,因为我会将此数据发送到一个捆绑包,该捆绑包只能处理
Query
对象,但不能处理
NativeQuery
:-/谢谢您的帮助:)我已经有了NativeQuery,看到捆绑包不能处理它,我感到很沮丧,但遗憾的是,我不得不使用它,你到底是从哪里得到这个错误的?如何使用DQL语句?我在类存储库中使用它,在那里创建并启动它。错误出现在我的前端。它是筛选函数的一部分,如果调用此函数,则会出现服务器错误。stacktrace和错误日志都没有提供有用的信息:/n当您使用两个括号时,删除一个
如何:/n看起来确实是语法问题,因为您的查询看起来很好。尝试了这一点,我再次遇到相同的错误,只是代替了
有一个
期望来自条件
谢谢,我不知道把箱子放在哪里,因为无论我怎么尝试,它在ORDER子句中都不起作用!我希望在未来的版本中,他们可以在order子句中使用。值得注意的是,如果您不希望结果中返回numImage,可以添加HINDED<代码>选择t,SUM(当p.image=1时为1,否则为0结束)作为隐藏数字图像虽然用SUM替换COUNT在您的情况下有效,但在DQL中使用CASE部分似乎存在一般问题。我在这里为它打开了一个问题:请随意订阅。