2010-11-13 188 views
1

我想轉換原始mysql查詢以使用主義。 該表中充滿了統計行,我的查詢正在檢查以查看距離平均值數據增益偏離平均每天增長的距離。子查詢內的主體子查詢

SQL版本完全按照我期望的方式工作。轉換爲教義給了我一個錯誤。

以下是原文:

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_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'

任何想法?

回答

0

我認爲這要你在你寫的DQL查詢稱之爲inf.infamydifference,而不是僅僅infamydifference

select AVG(inf.infamydifference) as avginf