[Mysql][PDO] Comment faire un SELECT sur 2 bases ?

Comment faire un SELECT sur 2 bases ? [Mysql][PDO] - SQL/NoSQL - Programmation

Marsh Posté le 17-12-2008 à 15:15:42    

Bonjour, je cherche à faire un SELECT sur 2 bases (sur le même serveur).
Sans PDO, c'est facile : SELECT * FROM db1.table1, db2.table2 et zou !
 
Avec PDO, je ne vois pas trop comment faire :/


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 15:15:42   

Reply

Marsh Posté le 17-12-2008 à 15:26:32    

http://fr.php.net/pdo
 
Et dans les commentaires :
 

Citation :

It doesn't seem at this time that there's a practical solution (besides creating multiple PDO objects and therefore DB connections) to accessing and switching between multiple databases -- as with the mysql_select_db function.


Message édité par Profil supprimé le 17-12-2008 à 15:26:50
Reply

Marsh Posté le 17-12-2008 à 15:37:16    

Ca ne me dérangerai pas de gérer plusieurs connexions (j'en ait déja une vers chaque base), mais je vois mal comment les utiliser .... (je suis une brèle en POO par ailleurs).

 

Actuellement, je fais ($dbh est ma 1ere connex, $dbh_vt la 2eme)

 

$sql="SELECT * FROM blabla WHERE truc=:truc";
$stmt=$dbh->prepare($sql);
$data=array(":truc'=>$machin);
$stmt->execute($data);
while ....

 

Je vois mal comment construire la requête pour qu'elle porte sur les 2 bases (même en utilisant 2 connexions)


Message édité par getget le 17-12-2008 à 15:49:01

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 15:38:33    

attention : deux tables ou deux bases : c'est complètement différent ;)

Reply

Marsh Posté le 17-12-2008 à 15:41:27    

stadire qu'une seule requête sur deux bases c'est mauvais signe pour le design de ton truc, déjà ...[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 15:51:30    

2 bases ;)
 
Je me connecte en tant que client sur une base sur laquelle je retrouve l'emploi du temps de mes etudiants (et là, j'ai pas le choix, ca dépend du logiciel d'EDT).
En parallèle de ca, j'ai une autre base dans laquelle j'enregistre des absences (qui dépendent de séances que je trouve dans la base de l'EDT) ...


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 15:55:23    

getget a écrit :

2 bases ;)
 
Je me connecte en tant que client sur une base sur laquelle je retrouve l'emploi du temps de mes etudiants (et là, j'ai pas le choix, ca dépend du logiciel d'EDT).
En parallèle de ca, j'ai une autre base dans laquelle j'enregistre des absences (qui dépendent de séances que je trouve dans la base de l'EDT) ...


 
question con : pourquoi tu n'ajoutes pas tout simplement des tables dans la base existante, genre en les préfixant d'un truc spécifique? [:petrus dei]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 16:06:09    

J'ai pas acces en écriture  :ange:


Message édité par getget le 17-12-2008 à 16:06:27

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 16:09:02    

ça pue le piratage d'un accès sql ça.[:petrus75]
J'ai bien peur qu'on ne soit pas censés aider, dans ce cas.[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 16:31:01    

Aucun piratage, j'ai accès en lecture à une base, via un User spécifique, base qui est commune à tout l'IUT.

 

D'un autre coté, j'ai l'espace web de mon département, avec sa propre base (et un autre user), sur laquelle j'ai tous les droits.

 

Je ne peux pas faire mieux comme "preuve" que ca : (yaplus :D), hébergé sur le site duquel je suis en train de m'occuper ;)


Message édité par getget le 17-12-2008 à 16:48:52

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 16:31:01   

Reply

Marsh Posté le 17-12-2008 à 16:31:44    

Bon, c'est le même serveur mysql, au moins?[:petrus dei]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 16:43:50    

Yep, et j'ai déja 2 connexions vers les 2 bases (et individuellement, j'accède à chaque base sans soucis)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 16:57:21    

getget a écrit :

Yep, et j'ai déja 2 connexions vers les 2 bases (et individuellement, j'accède à chaque base sans soucis)


il faudrait utiliser le même utilisateur, je pense...et il y a une syntaxe pour faire ça, après, avec mysql - si je me souviens bien c'est un truc du genre :

 

select *
from base1.toto join base2.tata on toto.tata_id = tata.id


Message édité par skeye le 17-12-2008 à 16:57:35

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:05:53    

Ca y'a aucun soucis, avec mysql ou mysqli  je sais faire (tu ouvres 2 connexions et "SELECT * FROM db1.Table1, db2.Table2 .." ), mais avec PDO, je vois pas comment faire :/


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 17:10:32    

getget a écrit :

Ca y'a aucun soucis, avec mysql ou mysqli  je sais faire (tu ouvres 2 connexions et "SELECT * FROM db1.Table1, db2.Table2 .." ), mais avec PDO, je vois pas comment faire :/


Pourquoi deux connections? Une seule devrait suffire, si c'est le même serveur. [:pingouino]
Donc je vois pas pourquoi ça poserait problème avec PDO...? :??:


Message édité par skeye le 17-12-2008 à 17:10:36

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:15:55    

Ben quand tu crées ta connection, tu dois selectionner une base non  :pt1cable:


Message édité par getget le 17-12-2008 à 17:16:17

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 17:17:03    

selectionner une base avec mysql c'est juste choisir pour quelle base tu vas avoir un raccourci, ça t'empêche pas d'interroger les autres aussi si ton utilisateur a les droits, non?:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:20:25    

Ouais mais moi j'ai 2 utilisateurs différents :D

 

Edith : même sur ma DB de test ou c'est le même user pour les 2 bases, ca marche po :/

 

Si j'ai un $dbh qui est ouvert vers la base "gmp", je peux pas faire une requête vers la base "vt" :/

Message cité 1 fois
Message édité par getget le 17-12-2008 à 17:22:14

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 17:21:29    

essaye en ligne de commande, tu verras : tu peux très bien faire un truc de ce style :
 
use toto;
select * from titi.tutu;


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:22:09    

getget a écrit :

Ouais mais moi j'ai 2 utilisateurs différents :D


Et la base de ton appli à toi est pas visible par celui qui a le droit de lire l'autre?[:moule_bite]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:23:06    

(genre ce serait une bonne idée d'en faire le propriétaire? :o )


Message édité par skeye le 17-12-2008 à 17:23:12

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:28:25    

C'est l'admin réseau de l'IUT qui gère les droits, je peux pas trop faire ce que je veux ;)
 
Ma seule difficulté, c'est de trouver comment écrire une requête qui va utiliser les 2 connexions en notation "objet" :/
 


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 17:33:52    

l'admin réseau qui gère les droits de la db?[:pingouino]
 
Ta difficulté ne peut pas être résolue, ça n'a strictement aucun sens. Pour faire ça il te faut un utilisateur qui peut lire les deux bases à la fois.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-12-2008 à 17:37:52    

RAAAAAAAAAAAAAAAAHHHHH
 
Une p*ù$ain d'erreur de typo dans ma requète :/
Ca marche (au moins en local).


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-12-2008 à 19:16:20    

On pourrait voir ta requête? Parce que ça fait un moment que je te lis, et je suis toujours pas sûr d'avoir compris ton problème


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 17-12-2008 à 21:02:22    

SELECT gmp.gestiut_profs.Nom AS nomprof,vt.enseignements.nom AS nomenseignement
FROM gmp.mabase
LEFT JOIN vt.uneautre ON (vt.uneautre.codeSeance=gmp.mabase.idSeanceVt)
LEFT JOIN vt.encoreune ON (vt.encoreune.codeEnseignement=vt.uneautre.codeEnseignement)
WHERE
     (gmp.mabase.idAbsence
     IN (SELECT MAX(gmp.mabase.idAbsence)
          FROM gmp.mabase
          GROUP BY gmp.mabase.idSeanceVt, gmp.mabase.idSuivre_semestre)
     )
     AND gmp.mabase.idSuivre_semestre=:idSuivre_semestre

 

Bien évidemment, j'ai changé les noms des bases et j'ai pas mit tous les champs :D


Message édité par getget le 17-12-2008 à 21:03:31

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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