jointure entre deux bases de données ?

Eléphant du PHP | 218 Messages

24 déc. 2010, 01:04

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'];
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 déc. 2010, 03:31

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 !

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 déc. 2010, 11:43

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 218 Messages

24 déc. 2010, 14:13

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("
?
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 déc. 2010, 15:27

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 ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 218 Messages

26 déc. 2010, 17:35

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 ?
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Eléphant du PHP | 218 Messages

27 déc. 2010, 14:36

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
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2010, 17:37

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... :(
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...