mysql - Doctrine 2 DQL CASE WHEN in Count

标签 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;

我需要在 Doctrine 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

我得到这个错误:

在 Bundle:Admin:showTurnsFiltered.html 中渲染模板时抛出异常(“[Syntax Error] line 0, col 99: Error: Expected end of string, got '.'”) .twig 在第 75 行。

我做错了什么?

最佳答案

经过数小时的尝试和搜索,我自己找到了它,它正在使用这个 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

关于mysql - Doctrine 2 DQL CASE WHEN in Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568898/

相关文章:

mysql - 如何在mysql中使用load_file?我收到错误消息 "Can' t get stat of 'D:\w.ini'“!

MySQL以不同的排序顺序对多列进行排序

git - cap deploy 突然说身份验证失败

php - Symfony 2 - 从表中获取最后插入的行

php - Symfony2,学说限制和偏移量没有按预期工作

php - 教义2 : Load entity and childs count

MySQL:用户 "views"的表结构

mysql - 无法通过 digital ocean 上的 Sequel Pro 连接到 sql server

mysql - Doctrine 可以自己加入吗

symfony - 在编写功能测试时将 session 中的用户附加到当前的 EntityManager