2010-11-13 3 views
1

J'essaie de convertir une requête mysql brute pour utiliser la doctrine. La table est pleine de lignes de statistiques, et ma requête vérifie pour voir à quelle distance de la moyenne le gain de stat a dévié de l'augmentation moyenne chaque jour.Sous-requête de la doctrine dans la sous-requête

La version SQL fonctionne exactement comme je l'attend pour agir. La conversion en Doctrine me donne une erreur.

est ici l'original:

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 

Et voici la requête Doctrine brisée:

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)"); 

qui génère cette 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) 

L'erreur est:

Unknown colonne 'infamydifference' dans 'liste des champs'

Des idées?

Répondre

0

Je pense qu'il veut que vous appelez inf.infamydifference au lieu de simplement infamydifference dans la requête DQL vous écrit:

select AVG(inf.infamydifference) as avginf 
Questions connexes