IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ORM PHP Discussion :

Requete multitables avec relation pas dans le schéma


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut Requete multitables avec relation pas dans le schéma
    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

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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, email f')
                    ->andWhere('e.asset_id = f.asset_id')
                    ->andWhere('f.datestate= ? ', $prevdate )
                    ->andWhere('e.datestate= ? ',$date)
                    ->orderBy('(e.total-f.total)');
    C'est moins beau qu'avec la condition de lien dans le leftloin mais cela devrait marcher, je pense. Non testé.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    j'avais déjà tester.
    Si la query créé est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.asset_id = e2.asset_id AND e2.datestate = ? AND e.datestate = ?) ORDER BY (e.total-e2.total)
    j'ai toujours le message d'erreur lors de l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "email" with an alias of "f" in your query does not reference the parent component it is related to.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Parfois faut essayer d'être plus bête que lui...

    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $q = $this->createQuery()
                    ->select('e.id, e.asset_id,e.total,f.total')
                    ->from('email e, email e2')
                    ->andWhere('e.asset_id = e2.asset_id')
                    ->andWhere('e2.datestate= ? ', $prevdate )
                    ->andWhere('e.datestate= ? ',$date)
                    ->orderBy('(e.total-e2.total)');
    ca donne quoi ?

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    même punition.
    J'ai l'impression que doctrine n'accepte de lié des tables que si elles ont une relation dans le schéma !!!

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Même message d'erreur ?

    Ce n'est pas possible, il n'y a plus de "f" dans la requête.

Discussions similaires

  1. des requetes sql avec vb.net dans asp.net
    Par fishingman dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/05/2010, 21h45
  2. Requete php avec attribut sélectionné dans liste
    Par drogba72 dans le forum Langage
    Réponses: 7
    Dernier message: 20/02/2009, 09h39
  3. requete sql avec une condition dans une zone de liste
    Par khilim1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/12/2008, 12h00
  4. requete SQL avec where dynamique dans une servlet
    Par Mickael Scofild dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/08/2007, 12h05
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo