【问题标题】:Doctrine subquery within subquery子查询中的教义子查询
【发布时间】:2010-11-13 16:43:59
【问题描述】:

我正在尝试将原始 mysql 查询转换为使用原则。 该表充满了统计数据行,我的查询正在检查以查看统计数据增益与每天的平均增幅相差多远。

SQL 版本的工作方式完全符合我的预期。转换为 Doctrine 给我一个错误。

这是原文:

SELECT
    l.*,
    DAY(l.created_at) as day,
    MONTH(l.created_at) as month,
    YEAR(l.created_at) as year,
    (
        MAX(l.infamyrenown) -
        MIN(l.infamyrenown) -
        (
            SELECT AVG(infamydifference) as avginf FROM
            (
                    SELECT (
                        MAX(inf.infamyrenown) -
                        MIN(inf.infamyrenown)
                        ) as infamydifference
                    FROM lotro_record inf
                    GROUP BY DAY(inf.created_at)
            ) as p1
        )
    ) as infamy_deviance
FROM
    lotro_record l
GROUP BY
    year,month,day

这是损坏的 Doctrine 查询:

Doctrine_Core::getTable("LotroRecord")
->createQuery("l")
->select("l.*")
->addSelect("DAY(created_at)")
->addSelect("MONTH(created_at)")
->addSelect("YEAR(created_at)")
->addSelect("(
    MAX(l.infamyrenown) -
    MIN(l.infamyrenown) -
    (
        select AVG(infamydifference) as avginf FROM (
            SELECT (
                MAX(inf.infamyrenown) -
                MIN(inf.infamyrenown)
            ) as infamydifference
            FROM LotroRecord inf
            GROUP BY DAY(inf.created_at)
        ) as p1
    )
) as infamy_deviance")
->where("lotro_character_id = {$this->getId()}")
->groupBy("DAY(created_at)");

生成此 SQL:

SELECT l.id                                        AS l__id, 
       l.infamyrenown                              AS l__infamyrenown, 
       l.kills                                     AS l__kills, 
       l.killing_blows                             AS l__killing_blows, 
       l.kills_above_rating                        AS l__kills_above_rating, 
       l.kills_below_rating                        AS l__kills_below_rating, 
       l.deaths                                    AS l__deaths, 
       l.lotro_character_id                        AS l__lotro_character_id, 
       l.created_at                                AS l__created_at, 
       l.updated_at                                AS l__updated_at, 
       DAY(l.created_at)                           AS l__0, 
       MONTH(l.created_at)                         AS l__1, 
       YEAR(l.created_at)                          AS l__2, 
       ( Max(l.infamyrenown) - Min(l.infamyrenown) - (SELECT 
         Avg(infamydifference) AS avginf 
                                                      FROM 
           (SELECT ( Max(l2.infamyrenown) - Min(l2.infamyrenown) ) AS l__0 
            FROM   lotro_record l2 
            GROUP  BY DAY(l2.created_at)) AS p1) ) AS l__3 
FROM   lotro_record l 
WHERE  ( l.lotro_character_id = 1 ) 
GROUP  BY DAY(l.created_at) 

错误是:

“字段列表”中的未知列“infamydifference”

有什么想法吗?

【问题讨论】:

    标签: mysql symfony1 doctrine


    【解决方案1】:

    我认为它希望您在您编写的 DQL 查询中将其称为 inf.infamydifference 而不仅仅是 infamydifference

    select AVG(inf.infamydifference) as avginf
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多