requete en PHP/MySQL sur deux base differentes ...

requete en PHP/MySQL sur deux base differentes ... - PHP - Programmation

Marsh Posté le 07-04-2004 à 11:19:34    

Voila, je bosse sur un projet qui possède deux bases de données différentes et je dois créer une requête faisant le lien entre une table de chaque base.
 
Quelqu'un a-t-il une solution pour eviter d'exploiter les résulats sous php et tout faire en requete mysql ? MERCI

Reply

Marsh Posté le 07-04-2004 à 11:19:34   

Reply

Marsh Posté le 07-04-2004 à 11:28:15    

Elles sont sur le même serveur ?
Si oui, tu peux préfixer le nom de la table par le nom de la base :
SELECT * FROM table1, nom_base.table2 WHERE ...
 
(sous réserve que le user ait bien les droits en lecture sur cette base)


Message édité par mrbebert le 07-04-2004 à 11:28:54
Reply

Marsh Posté le 07-04-2004 à 11:30:57    

Tu es sur de ce que tu avance ou pense que c'est ça ?
Parce que dans ce cas là, comment fais tu les connexions au deux differentes base ???

Reply

Marsh Posté le 07-04-2004 à 11:31:47    

il faut que ton user ait les droits suffisant sur chacune des bases ;)

Reply

Marsh Posté le 07-04-2004 à 11:37:04    

dites moi alors si la syntaxe est bonne :
 
SELECT * FROM base1.table1, base2.table2
WHERE base1.table1.id= base.table2.id
 
Comment on se connecte dans ce cas la ?

Reply

Marsh Posté le 07-04-2004 à 13:33:29    

tibrol a écrit :

Tu es sur de ce que tu avance ou pense que c'est ça ?
Parce que dans ce cas là, comment fais tu les connexions au deux differentes base ???

J'ai précisé que c'était dans le cas où les 2 bases étaient situées sur le même serveur (et que tu avait les droits au moins en lecture sur ces 2 bases).
Dans ce cas, tu te connectes normalement, une seule fois.
 
Si les bases sont sur 2 serveurs différents, je pense que ca va pas être possible [:figti]  
(même s'il me semble que ce genre de fonctionalité existe sur d'autres SGBD)

Reply

Marsh Posté le 07-04-2004 à 13:49:53    

tibrol a écrit :

dites moi alors si la syntaxe est bonne :
 
SELECT * FROM base1.table1, base2.table2
WHERE base1.table1.id= base.table2.id
 
Comment on se connecte dans ce cas la ?

A priori, le préfixe du nom de la base, c'est uniquement dans le "FROM" :
SELECT * FROM base1.table1, base2.table2
WHERE table1.id = table2.id
 
Si les 2 tables ont le même nom, tu peux en renommer une avec AS :
SELECT * FROM base1.table AS tb1, base2.table AS tb2
WHERE t1.id = t2.id

Reply

Marsh Posté le 07-04-2004 à 14:31:26    

Nein, ça ne fonctionne pas... il ne veux pas faire la requete...

Reply

Marsh Posté le 07-04-2004 à 14:50:50    

OK C COOL ça fonctionne !
 
Pour ceux que ça interresse :
 
$host = "localhost";
$utilisateur = "###";
$passwd = "";
$passwd = "#########";
$nom_base1 = "###";
$nom_base2 = "###";
 
$db = mysql_connect( $host, $utilisateur, $passwd) or die ("Erreur de connexion au serveur" );
 
mysql_select_db ( $nom_base1 , $db) or die ("Erreur de connexion a la premiere base de donnees" );
 
mysql_select_db ( $nom_base2 , $db) or die ("Erreur de connexion a la premiere base de donnees" );
 
 
$res = mysql_query("select P.nomMembre from $nom_base1.Membre P, $nom_base2.mrbs_entry M WHERE P.login = M.create_by" ) or die("Je ne peux faire ta requete" );
 
 

Reply

Marsh Posté le 07-04-2004 à 15:06:16    

C'est inutile de faire 2 mysql_select_db() à la suite :)  
 
(en fait, compte tenu de la requête qui est exécutée, aucun mysql_select_db() n'est nécessaire puisque tu précises le nom de la base pour chacune des tables utilisées)

Reply

Marsh Posté le 07-04-2004 à 15:06:16   

Reply

Marsh Posté le 07-04-2004 à 16:46:07    

hein hein ! ok merci

Reply

Marsh Posté le 28-12-2012 à 21:08:22    

Super les gas merci pour votre aide depuis tout fonctionne niquel  :love:  
 
Cependant j'ai une petite précision à apporter à tout ça.
 
Je code en PHP sur un server LAMP.
Ma version de php est la 5.3.3 et apache 2.2.3.
 
Voici l'extrait de mon code avec des nom de champs simplifié


<?php
#Fichier contenant les paramètres effectifs des db
require('inc.db.php');
 
#Connexion à la base de données 1
$db = mysql_connect("$host1", "$user1", "$pwd1" ) or die('Erreur de connexion '.mysql_error());  
 
#Connexion à la base de données 2
$db = mysql_connect("$host2", "$user2", "$pwd2" ) or die('Erreur de connexion '.mysql_error());  
 
#SQL
$sql = "SELECT  
   $base1.client.c_id AS `id_client`,
   $base1.client.c_nom AS `nom`,
   $base2.clients_echeancier.id AS `id_ech`,
   $base2.clients_echeancier.libelle AS `libelle`
  FROM  
   $base1.client, $base412.clients_echeancier";
 
#Execution
$exe = mysql_query($sql) or die('Erreur d\'execution ligne numéro '.$lignum.': fichier '.$filename.''.mysql_error());


 
Précision très importante :  
dans le FROM la syntaxe ne doit pas être en backtick pour que cela fonctionne  
 
En somme :
Correct : FROM $base1.client, $base412.clients_echeancier
 
Incorrecte : FROM `$base1.client`, `$base412.clients_echeancier`

Reply

Marsh Posté le 31-12-2012 à 22:25:08    

Joli déterrage.
 
Est-ce bien utile de faire deux mysql_connect, et donc d'écraser le contenu de db ?


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 02-01-2013 à 10:16:10    

Effectivement, c'est étrange de travailler sur 2 base de données??
C'est peut-être l’importation d'anciennes données pour l'injecter dans la nouvelle :)


---------------
Besoin d'aide pour votre projet? agence web
Reply

Marsh Posté le 03-01-2013 à 00:53:11    

C'est assez fréquent quand on fait du sharding sur de gros volumes de données, mais vu le niveau de code que j'ai sous les yeux, ça m'étonnerait que ça soit pour ces raisons là !


---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed