Page 1 sur 1

jointure entre deux bases de données ?

Posté : 24 déc. 2010, 01:04
par wwwbillgates
Bonjour à tous,
J'ai ci-dessous deux requêtes sql vers deux bases de données différentes ce qui me donne donc deux résultats différents. Mais je souhaiterais en fait n'avoir qu'un seul résultat en faisant une sorte de jointure entre mes deux bases de données afin de récupérer qu'un seul résultat.
Je ne sais pas si cela est possible et comment je dois m'y prendre ?

		$reponse = $base_de_donees_1->prepare("
								SELECT date_commande, id
								FROM commandes
								WHERE MONTH(date_commande) = :mois
								AND YEAR(date_commande) = :annee
								order by id desc limit 1
								");
		$reponse->execute(array(
								'mois' => date('m'),
								'annee' => date('Y')
								));
		$resultat_base_1 = $reponse->fetch(PDO::FETCH_ASSOC);
		
		
		
		$reponse = $base_de_donees_2->prepare("
								SELECT date_commande, id
								FROM commandes
								WHERE MONTH(date_commande) = :mois
								AND YEAR(date_commande) = :annee
								order by id desc limit 1
								");
		$reponse->execute(array(
								'mois' => date('m'),
								'annee' => date('Y')
								));
		$resultat_base_2 = $reponse->fetch(PDO::FETCH_ASSOC);

		
echo $resultat_base_1['id'];		
echo $resultat_base_2['id'];

Re: jointure entre deux bases de données ?

Posté : 24 déc. 2010, 03:31
par moogli
Salut ,

Tu parle de deux serveurs diffenrents avec deux connexions differentes (pas d'amalgame avec les tables)?
Si oui ce n'est pas possible de ce que je sais.
Peut etre que d'autre auront une autre reponse !

@+

Re: jointure entre deux bases de données ?

Posté : 24 déc. 2010, 11:43
par Ryle
Si les deux bases de données sont sur le même serveur et que l'utilisateur que tu utilises pour te connecter dessus à accès aux deux bases, il te suffit simplement de préfixer le nom des tables par le nom de la base où elles se trouvent :
SELECT ... 
FROM base1.maTable, base2.maTable
WHERE base1.maTable.monChamp = base2.maTable.monChamp
Ceci ne fonctionne effectivement que si ta connexion ne se fait qu'à une seule et même machine (un seul host) et avec un seul et même utilisateur (user et mot de passe) qui accède aux deux bases de données.

Re: jointure entre deux bases de données ?

Posté : 24 déc. 2010, 14:13
par wwwbillgates
Waaah ca l'air simple :) Oui effectivement je n'avai pas précisé qu'i s'agissait du meme serveur je vais donc essayer et je vous tien au courant mais par contre du coup je dois mettre quoi à la place de
$reponse = $base_de_donees_1->prepare("
?

Re: jointure entre deux bases de données ?

Posté : 24 déc. 2010, 15:27
par Ryle
Ben... la requête SQL qui te retournera le résultat que tu souhaites obtenir... (ouais, je sais, elle est facile celle là ;))

Si c'est juste la "somme" des deux résultats que tu veux, il te suffit de lier tes requêtes avec UNION :)
SELECT ... FROM base1.maTable WHERE ...
UNION
SELECT ... FROM base2.maTable WHERE ...

Re: jointure entre deux bases de données ?

Posté : 26 déc. 2010, 17:35
par wwwbillgates
Super merci beaucoup avec UNION ca fonctionne par contre je n'ai pas réussi avec la première méthode mais bon en même temps je n'ai pas trop saisi non plus la différence entre les deux méthodes.
Et avec un INSERT INTO j'imagine que UNION peut également fonctionner ?

Re: jointure entre deux bases de données ?

Posté : 27 déc. 2010, 14:36
par wwwbillgates
Ceci ne fonctionne effectivement que si ta connexion ne se fait qu'à une seule et même machine (un seul host) et avec un seul et même utilisateur (user et mot de passe) qui accède aux deux bases de données.
Salut je vien de me rendre compte que le UNION ne fonctionnait pas en ligne mais seuleument en local, je suis chez 1&1 et mon serveur est un serveur auto-administré.
Es ce que ca veu dire que je ne peu pas acceder a plusieur bases de données, ou ya t'il un moyen?


Voila a quoi ressemble mes bases de données sur 1&1:

Nom de la base de données................Nom d'utilisateur.................Nom du serveur de la base de données...........Description
db20085xxxx..................................dbo20085xxxx....................dbxxx.1and1.fr...........................................base1
db30015zzzz..................................dbo30015zzzz....................dbzzz.1and1.fr..........................................base2

Re: jointure entre deux bases de données ?

Posté : 27 déc. 2010, 17:37
par Ryle
Comme indiqué plus haut, cela ne fonctionne que si l'utilisateur que tu utilises pour te connecter dessus à un droit d'accès aux deux bases de données. Si tu as deux utilisateurs différents et qu'aucun d'eux ne peut accéder à la base de l'autre, cela ne fonctionnera pas... :(