Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2007, 15h15   #1
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Par défaut [ADODB] Connexion à 2 bases de données

Bien bonjour,

Voilà, je sais qu'il est possible de connecter deux(2) bases de données ensembles mais voilà est-ce la bonne façons de le faire pour que cela soit le plus simple et le plus performant!?

Ma manière est bien simple, dans ma classe je déclare tout simplement 2 connexions et j'appelle les 2 ensuite dans un autre fichier quelconque...

Fichier de config pour ma connexion: (les 2 connexions)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$sgc_db_dbtype = 'mysql';
$sgc_db_server = 'localhost';
$sgc_db_username = 'USER';
$sgc_db_password = '';
$sgc_db_dbname = 'AAA';
 
// 2e connexions
$xrms_db_dbtype = 'mysql';
$xrms_db_server = 'localhost';
$xrms_db_username = 'USER';
$xrms_db_password = '';
$xrms_db_dbname = 'BBB';

Une page qu'il l'apelle une ou les 2 connexions

Code :
1
2
3
4
5
$con = &adonewconnection($sgc_db_dbtype);
$con->connect($sgc_db_server, $sgc_db_username, $sgc_db_password, $sgc_db_dbname);
 
$conx = &adonewconnection($xrms_db_dbtype);
$conx->connect($xrms_db_server, $xrms_db_username, $xrms_db_password, $xrms_db_dbname);

Donc ma question tourne autour de cela, lorsque je voudrai joindre 2 ID de 2 tables qui sont chacunes dans une bases de données différente, quel est la BONNE méthodes de l'écrire dans un SELECT ou autre?

J'espère avoir été un minimum clair.

Merci.
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 17h13   #2
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 41
Points : 17
Points : 17
Si j'ai bien compris, tu veux faire uen jointure entre deux tables différentes, provenant de deux bd différentes. JE pense qu'il suffit de faire un SELECT dans la 1ére connexion, puis récupérer le resultat puis l'incruster dans le second SELECT.

Exemple :

$resultat = (SELECT ID from Table_BD1)

$resultat2 = (SELECT * FROM Table_BD2 WHERE ID IN $resultat)

Biensur, c'est une explication du genre algorithmique à toi d'ajouter les fonctions nécessaires pour le traitement des requêtes.
NiGHtyWolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 19h32   #3
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Salut,

Effectivement, je veux faire un lien de 2 tables différentes, provenant de 2 bd différente, c'est bien cette méthode là que je fesais avant, mais on m'a déjà critiqué sur ma méthode de lier 2 BD et bon puisque cetait des informaticiens qui n'ont pas l'esprit du partage et d'open source cela a faite qu'il me l'ont pseudo dit....

Bref, si quelqu'un connais la méthode en tant que tel n'hésitez pas de me le dire pendant que je continue a rechercher!

Merci
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 12h10   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
pour faire une requête dans plusieurs base, il te faut déjà un utilisateur MySQL qui a accès à ces différentes base (apparemment c'est le cas avec ton exemple et les bases "AAA" et "BBB")
ensuite tu te connectes sans préciser de base. là je ne sais pas si c'est faisable avec ta bibliothèque mais c'est faisable avec les bibliothèque de base "mysql" et "mysqli" (je n'ai jamais testé avec PDO, à voir)
et ensuite tu fais ce genre de requête :
Code SQL :
1
2
3
4
5
SELECT T1.idClient, T2.nomPays
FROM AAA.Client AS T1
INNER JOIN BBB.Pays AS T2
    ON T2.idPays = T1.idPays
WHERE idClient = '3012';
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 16h08   #5
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Citation:
pour faire une requête dans plusieurs base, il te faut déjà un utilisateur MySQL qui a accès à ces différentes base (apparemment c'est le cas avec ton exemple et les bases "AAA" et "BBB")
ensuite tu te connectes sans préciser de base. là je ne sais pas si c'est faisable avec ta bibliothèque mais c'est faisable avec les bibliothèque de base "mysql" et "mysqli" (je n'ai jamais testé avec PDO, à voir)
et ensuite tu fais ce genre de requête :
Code SQL :

SELECT T1.idClient, T2.nomPays FROM AAA.Client AS T1 INNER JOIN BBB.Pays AS T2 ON T2.idPays = T1.idPays WHERE idClient = '3012';
Merci, j'aime bien le concept.

serais t'il possible croyez-vous avec ce type d'architecture...

Code :
1
2
3
4
5
$con = &adonewconnection($sgc_db_dbtype);
$con->connect($sgc_db_server, $sgc_db_username, $sgc_db_password, $sgc_db_dbname);
 
$conx = &adonewconnection($xrms_db_dbtype);
$conx->connect($xrms_db_server, $xrms_db_username, $xrms_db_password, $xrms_db_dbname);
J'appelle mes 2 bd de cette manière dans mes pages et ensuite pour faire une requete simple je fais ceci:

Code :
1
2
3
4
5
6
7
8
9
$sql = "SELECT * FROM personnel WHERE statut_id = 1";
$rst = $con->execute($sql);
while(!$rst->EOF)
{
	$nom = $rst->fields['nom'];
	echo "Nom: ".$nom;
 
    $rst->movenext();
}
Mais la méthode dont tu me parles mathieu peut-elle s'appliquer encore?

Merci,

Thomas
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 16h25   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
je n'ai pas compris ta question, qu'est ce que tu cherches à faire ? montre nous ce que tu as déjà essayé même si ça ne fonctionne pas
en ce qui concerne la connexion, je t'ai répondu dans mon 1er message
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 16h35   #7
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Salut,

Voilà ce que je fais, mais qui est totalement mauvais au niveaux de ma 2e requetes. Ma question est tjrs la même, mais j'essaye plutot de faire un peu comme mathieu ma proposé de faire.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$conx = &adonewconnection($xrms_db_dbtype);
$conx->connect($xrms_db_server, $xrms_db_username, $xrms_db_password, $xrms_db_dbname);
 
$sql = "SELECT * FROM opportunities";
 
$tbl = con->execute($sql);
 
$con = &adonewconnection($sgc_db_dbtype);
$con->connect($sgc_db_server, $sgc_db_username, $sgc_db_password, $sgc_db_dbname);
 
$sql0 = "SELECT numero_iso, description, T1.opportunity_description " .
								"FROM $tbl.opportunities AS T1
								INNER JOIN mandat AS T2
    							ON T2.numero_iso = T1.numero_iso ";
 
						$rst = $con->execute($sql0);
 
						while(!$rst->EOF)
						{	
							echo "<br />Description: ".$rst->fields['description'];
							$rst->movenext();		
						}
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 16h38   #8
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par mathieu
tu te connectes sans préciser de base. là je ne sais pas si c'est faisable avec ta bibliothèque mais c'est faisable avec les bibliothèque de base "mysql" et "mysqli" (je n'ai jamais testé avec PDO, à voir)
dans mon exemple il y a une seule connexion
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 17h54   #9
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Voila j'ai enfin trouvé.

je devais mettre exactement le nom de la bd, je croyais pas que la requete pouvais fonctionner quand même. Merci à mathieu.

Code :
1
2
3
4
5
6
7
8
9
10
$sql0 = "SELECT numero_iso, description, SA.company_name " .
								"FROM mandats m LEFT JOIN $xrms_db_dbname.companies SA ON SA.company_id=m.client_id";
    						$con->debug=true; 	
						$rst = $con->execute($sql0);
 
						while(!$rst->EOF)
						{	
							echo "<br />Description: ".$rst->fields['description'];
							$rst->movenext();		
						}
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h35.


 
 
 
 
Partenaires

Hébergement Web