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

Zend_Db PHP Discussion :

Zend_DB_Table_Select : jointure externe [ZF 1.10]


Sujet :

Zend_Db PHP

  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Zend_DB_Table_Select : jointure externe
    Bonjour,
    J'essaie une requête avec pas mal de jointures dans une méthode d'une Zend_Db_Table_Abstract :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    class Application_Model_DbTable_Etudiant extends Zend_Db_Table_Abstract
    {
     
        protected $_name = 'th_etudiant_etu';
        protected $_primary = 'etu_id_candidat';
     
        /**
         * inscritStage(String $login)
         * Donne le stage auquel est éventuellement inscrit l'étudiant
         * @param String $login : Identifiant de l'étudiant connecté
         * @return Zend_Db_Table_Row_Abstract : Le stage ou NULL
         */
        public function inscritStage($login)
        {
            /* $select correspond à la requête SQL ci-dessous :
                  SELECT ssn.ssn_id, ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin,
                      e.etb_nom, c.cmn_nom, d.dpt_numero
                FROM th_utilisateur_uti AS u
                LEFT OUTER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis_id_candidat = u.uti_id_personne
                      LEFT OUTER JOIN te_session_ssn AS ssn ON ssn.ssn_id = cis.cis_id_session
                        INNER JOIN th_stage_stg AS stg ON stg.stg_id_session = ssn.ssn_id
                              INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement
                                INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune
                                      INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement
                WHERE u.uti_login = '$login'
             */
     
            $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
            $select->setIntegrityCheck(false);
            $select->from(array('etu'=>$this->_name));
            $select->join(array('uti'=>'th_utilisateur_uti'), 'uti.uti_id_personne = etu.etu_id_candidat');
            $select->joinLeft(array('cis'=>'tj_cnd_inscrire_cis'), 'cis.cis_id_candidat = etu.etu_id_candidat');
            $select->joinLeft(    array('ssn'=>'te_session_ssn'), 'ssn.ssn_id = cis.cis_id_session',
                                array('ssn_id', 'ssn_libelle', 'ssn_date_debut', 'ssn_date_fin')
                            );
            $select->join(array('stg'=>'th_stage_stg'), 'stg.stg_id_session = ssn.ssn_id');
            $select->join(array('etb'=>'te_etablissement_etb'), 'etb.etb_id = stg.stg_id_etablissement', 'etb_nom');
            $select->join(array('c'=>'tr_commune_cmn'), 'c.cmn_id = etb.etb_id_commune', 'cmn_nom');
            $select->join(array('d'=>'tr_departement_dpt'), 'd.dpt_id = c.cmn_id_departement', 'dpt_numero');
            $select->where('uti.uti_login = ?', $login);
     
            return $this->fetchRow($select);
        }
    }
    D'après mes tests, ça coince à la première jointure externe joinLeft.

    On ne peut pas faire de jointure externe de cette façon ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je suis passé par la requête SQL native, c'est beaucoup plus simple !
    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
        public function inscritStage($login)
        {
            $select = "
                SELECT ssn.ssn_id, ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin,
                      e.etb_nom, c.cmn_nom, d.dpt_numero
                FROM th_utilisateur_uti AS u
                LEFT OUTER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis_id_candidat = u.uti_id_personne
                      LEFT OUTER JOIN te_session_ssn AS ssn ON ssn.ssn_id = cis.cis_id_session
                        INNER JOIN th_stage_stg AS stg ON stg.stg_id_session = ssn.ssn_id
                              INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement
                                INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune
                                      INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement
                WHERE u.uti_login = ?
            ";
     
            return $this->_db->fetchRow($select, $login);
        }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 12h10
  2. Jointure externe compliquée
    Par miniil dans le forum Langage SQL
    Réponses: 9
    Dernier message: 19/02/2004, 09h27
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/12/2003, 17h57
  5. [Interbase] [Triggers] jointure externe
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 17/11/2003, 16h17

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