voila j'ai besoin de comparé une donnée dans une table qui varie tout les mois (la taille d'une boite mail).
mon schéma:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
email:
  columns:
    datestate: date
    asset_id: integer
    specialaccount: string(50)
    total: integer
    billable_euro: float(2)
    billable_act: float(2)
    snapshot_annual_act: float(2)
    billable_adj: float(2)
    snapshot_annual_adj: float(2)
  indexes:
    unique:
      fields: [datestate, asset_id]
      type: unique
  relations:
    Asset:
      local: asset_id
      foreign: id
      foreignAlias: monthlydiskspaceln
le but est de savoir chaque mois qui a le plus fait un travail de réduction de sa boite.

la requete SQL donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
SELECT e.asset_id, e.total,f.total,e.total-f.total
FROM email e
LEFT JOIN email f ON e.asset_id=f.asset_id AND f.datestate="2010-11-01"
WHERE e.datestate="2010-12-01"
ORDER BY e.total-f.total;
ce que j'ai transcrit en DSL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
$q = $this->createQuery()
                ->select('e.id, e.asset_id,e.total,f.total')
                ->from('email e')
                ->leftJoin('email f ON e.asset_id = f.asset_id AND f.datestate="'.$prevdate.'"')
                ->where('e.datestate= ? ',$date)
                ->orderBy('(e.total-f.total)');
sauf que ça me donne comme requete (via echo $q->getSqlQuery()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT e.id AS e__id, e.asset_id AS e__asset_id, e.total AS e__total, e2.id AS e2__id, e2.total AS e2__total FROM email e, email e2 WHERE (e.datestate = ?) ORDER BY (e.total-e2.total)
et au $q->execute() le message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
"email" with an alias of "f" in your query does not reference the parent component it is related to.
je ne voie pas trop comme me dépatouiller de ça