Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je cherche la solution pour faire une requête sur plusieurs bases de données.
voici comment je procéde pour une simple requête
SQL
SELECT x FROM table1
ZEND
$table = $this->getDbTable(); //instancie un objet Zend_Db_Table_Abstract $select = $table->select(); $select->from('table1',array('x')) ->setIntegrityCheck(false);
et maintenant ce que je voudrais obtenir c'est une requête de ce type :
SQL
SELECT x,y FROM base1.table1, base2.table2
J'ai essayais de passer un tableau en premier argument à la fonction from(), sans succes. Ou peut être faut-il construire deux select()... je ne sais pas.
Comment faites-vous pour ce genre de problème?
Dernière modification par _Fuse_ (17-01-2012 08:54:32)
Hors ligne
bonjour,
As-tu tout simplement essayé de passer "base1.table1" comme valeur à la fonction from() ?
Hors ligne
que non que non une connexion à ma connaissant de fait sur une et une seule base
et comme tout select dérive drirectement ou indirectement de
$databaseConexion->select();
même getDbTable()
je ne vois pas comment tu pourrait faire ça
de plus un select sur deux base suppose que la requête s'exécute sur deux serveur (à la rigueur sur un seul) dans le contexte de deux base qui s'ignore.
les outils qui permettent de faire ce genre de chose s'appuient soit sur un moteur de base de donnée capable de collaborer avec un autre de la même espèce et pour lesquels on a défini les règles de collaboration.
Soit c'est l'outil qui interroge les base qui interprète le SQL créé deux requêtes sur les deux serveur et ré agrège le tout lui même.
une connexion php est une connexion simple.
je n'ai pas souvenir que Zend ai ajouté cette capacité dans son code
A+JYT
Hors ligne
Bnojour,
Merci pour vos réponses.
@f.garoby, j'ai bien essayé de passer bas1.table1 dans le from il me semble que ça passé bien, par contre s tentant d'ajouter base2.table2 ça plantait. la fonction ne semble pas faite pour ça.
@sekaijin, les deux bases de données se trouvent sur le même serveur.
N'ayant pas trouvé de solutions efficaces je vais finalement faire autrement. Je vais donc dupliquer la table de base1 sur base2 et y ajouter un trigger. Cette table ne bouge pas beaucoup ça ne sera pas gourmand en ressources.
J'aurais pue faire deux requêtes séparées pour interroger les tables de la base1 et base2 mais le traitement du résultat en php par la suite est trop long pour ce que je veut en faire.
Dernière modification par _Fuse_ (16-01-2012 09:13:19)
Hors ligne
N'y a-t-il pas possibilité de créer une vue de la base1.table1 en base2.vue1 ?
Hors ligne
@Theocrite, je te remercie.
Effectivement c'est bien mieux avec une vue. Jusqu'à présent je n'avais pas utilisé les vues dans mysql, c'est une erreur je me rend compte que pour certains cas que j'aurais pue les utiliser bien plus.
Il n'y a pas de problème pour créer une vue à partir d'une autre base (attention aux droits quand même). Du côté performances rien à dire c'est nikel (j'ai aussi utilisé la recherche "fulltext" et fais plusieurs jointures dans cette requête).
Donc pour moi c'est la bonne solution.
;-)
Hors ligne
Le seul problème de la vue reste les écritures, mais en général quand on tape dans différentes bases, on fait surtout de la consultation dans les bases tierces et l'écriture se fait sur la principale...
Hors ligne
sekaijin a écrit:
que non que non une connexion à ma connaissant de fait sur une et une seule base
et comme tout select dérive drirectement ou indirectement de
$databaseConexion->select();
même getDbTable()
je ne vois pas comment tu pourrait faire ça
de plus un select sur deux base suppose que la requête s'exécute sur deux serveur (à la rigueur sur un seul) dans le contexte de deux base qui s'ignore.
les outils qui permettent de faire ce genre de chose s'appuient soit sur un moteur de base de donnée capable de collaborer avec un autre de la même espèce et pour lesquels on a défini les règles de collaboration.
Soit c'est l'outil qui interroge les base qui interprète le SQL créé deux requêtes sur les deux serveur et ré agrège le tout lui même.
une connexion php est une connexion simple.
je n'ai pas souvenir que Zend ai ajouté cette capacité dans son code
A+JYT
Oui, une connexion se fait sur une seule base, mais plusieurs SGBDR savent faire des jointures entre des tables de bases différentes (et même de moteurs différents), sans que cela nécessite une modification du SQL (par contre, il faut créer la connexion au serveur distant), donc ça aurait pu marcher...
Hors ligne