Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-08-2012 15:06:46

blackwires
Nouveau membre
Date d'inscription: 10-08-2012
Messages: 4

[Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

Bonjour à tous,

En tant que nouvel utilisateur du Zend Framework j'aimerais convertir mes requêtes MySQL mais après de longues recherches je n'arrive pas sur une certaine requête.

Voici mon problème :

J'ai 2 bases de données (et non deux tables) différentes situées sur le même serveur :
lesson et multicompte.

Je voudrais récupérer la liste des professeurs (située sur lesson.professeurs, professeurs étant une table)
liée à un utilisateur (Toto étant l'identifiant du client, voir ci-dessous).

Avant de passer à zend j'utilisais cette simple requête :

Code:

[lang=sql]SELECT p.* 
FROM lesson.professeurs p
    INNER JOIN multicompte.comptes c
        ON p.seq = c.lesson
WHERE c.ident = 'Toto'

Où multicompte.comptes.lesson (c.lesson) correspond à un INT associé à lesson.professeurs.seq (p.seq) pour identifier à quel cours l'utilisateur a accès.

Le soucis c'est que je n'arrive pas à retranscrire ma requête avec la séparation de la BDD comme je l'avais vu sous zend avec le query. Je pensais donc utiliser des select différents mais je n'arrive quand même pas à récupérer ce que je désire avec cette idée :

Voici la première version (sans jointures) que j'avais écrite qui ne marche pas :

Code:

 [lang=php] 
$select = $_db_lesson
$select->from( array( 'lesson.professeurs p', 'multicompte.comptes c',
                                'multicompte.custom a' ),
                                array( 'p.*' ) );
        $select->where( 'c.ident= ?', $username);
        $select->andWhere( 'a.ident=c.ident' );
        $select->andWhere( 'c.lesson=p.seq' );

        $resultRowSet = $select->fetchAll();

Et voici l'idée que j'avais eu pour me sortir de ce soucis mais je n'arrive pas à aller plus loin.

Code:

 [lang=php]  
    protected $_db_multicompte;
    protected $_db_lesson;

// Les db sont associées dans le constructeur de ma classe, il n'y a pas de soucis sur ça.

    $select_multicompte = $this->_db_multicompte->select();
    $select_lesson = $this->_db_lesson->select();

Je n'arrive pas à reconstruire ma requête selon ce principe.

J'avais pensé utiliser les vues SQL mais je n'ai pas trouvé comment les transcrire sur zend.

Je vous remercie d'avance pour votre aide et si je n'ai pas été assez clair n'hésitez pas à me le signaler !

Dernière modification par blackwires (10-08-2012 15:13:17)

Hors ligne

 

#2 10-08-2012 16:03:09

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

bonjour,
il me semble que votre requête en elle même pose problème même si elle ne concernerait qu'une seule BD.En effet, from ne peut que prendre ces arguments: 'une seule table' puis 'des colonnes'. Dans votre cas vous attribuez à from 2 tables.
Si vous voulez effectuez une jointure il vous faut la méthode join (équivalent jointure naturelle en SQL)

blackwires a écrit:

Bonjour à tous,

Voici mon problème :



Voici la première version (sans jointures) que j'avais écrite qui ne marche pas :

Code:

 [lang=php] 
$select = $_db_lesson
$select->from( array( 'lesson.professeurs p', 'multicompte.comptes c',
                                'multicompte.custom a' ),
                                array( 'p.*' ) );
        $select->where( 'c.ident= ?', $username);
        $select->andWhere( 'a.ident=c.ident' );
        $select->andWhere( 'c.lesson=p.seq' );

        $resultRowSet = $select->fetchAll();

!

Hors ligne

 

#3 10-08-2012 16:15:18

blackwires
Nouveau membre
Date d'inscription: 10-08-2012
Messages: 4

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

Je vous remercie pour cette information, je suis entrain de la réécrire avec la méthode inner join mais demeure mon plus gros soucis, réaliser une jointure sur une table située dans une autre DB ? Peut-on indiquer une DB à la jointure car je n'ai pas trouvé cette fonctionnalité ou alors procéder d'une autre manière ?

Voici le nouveau code :

Code:

[lang=php]
        $select->from( array('p' => 'lesson.professeurs p'), 
                        array( 'p.*' ) );
        $select->joinInner( array('c' => 'multicompte.comptes c'),
                            'p.seq = c.lesson' );
        $select->where( 'c.ident = ?', $username);

        $resultRowSet = $select->fetchAll();

Cordialement

Dernière modification par blackwires (10-08-2012 16:24:08)

Hors ligne

 

#4 10-08-2012 16:17:56

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

Dans le dernier argument de join vous pouvez préciser le nom de votre BD

Voici un exemple requête:

Code:

[lang=php]
 $query=$this->select()->from(array('p'=>'professeurs'),array('*'))->setIntegrityCheck(false)
                                   
                                  ->join(array('c'=>'comptes'),//table comptes
                                      'p.id=c.prof_id', //condition de jointures entre prof et comptes
                                      array('col1','col2'),  //colonnes à selectionner
                                     'multicomptes'     //nom de la BD

                                      )
                                     ->join(
                                       .......);
     $this->fetchAll($query);

Dernière modification par amiss (10-08-2012 16:20:53)

Hors ligne

 

#5 10-08-2012 16:19:42

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

pour voir la requête SQL générée faites un echo de l'objet $query.

Hors ligne

 

#6 10-08-2012 16:56:04

blackwires
Nouveau membre
Date d'inscription: 10-08-2012
Messages: 4

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

Je vous remercie pour votre aide je n'avais pas trouvé qu'il fallait rajouter un paramètre pour spécifier la DB.
Par contre peut-on faire en sorte de toutes les sélectionner sans avoir à les spécifier ?

Merci d'avance.

Hors ligne

 

#7 10-08-2012 18:11:37

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

bien sûr que oui on peut sélectionner toutes les colonnes sans les spécifier dans la requête. Dans ce cas soient vous les omettez soient à place de ces colonnes mettez '*' dans from et/ou dans join

Code:

->from('table','*')
...//idem dans join

Hors ligne

 

#8 11-08-2012 01:05:01

blackwires
Nouveau membre
Date d'inscription: 10-08-2012
Messages: 4

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

Effectivement tout simple.
Je vous remercie pour votre aide qui m'a grandement débloquée et pour votre attention !

Hors ligne

 

#9 13-08-2012 11:48:18

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_DB][1.11] Problème requête sur tables de 2 DB différentes.

de rien

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages