[MySQL] select sur deux bases

Résolu
Bonjour,

J ai fait de multiples recherches sur internet et j ai toujours pas trouvé réponse à cette question :
peut on (si oui comment) faire une requete type select sur deux bases MySQL différentes ?
en gros, un truc du genre :

select * from db1.tableA, db2.table2 where db1.tableA.chpX = db2.tableB.chpY


Ces deux bases sont sur le meme serveur

Merci pour vos réponses
Chmanu

8 réponses

  1. Bonjour

    J'ai résolu le problème de cette manière :

    $db1= "nombasededonnees1";
    $db2= "nombasededonnees2";

    $handle_db1 = mysql_connect($host, $user, $pass);
    $handle_db2 = mysql_connect($host, $user, $pass, TRUE);

    mysql_select_db($db1, $handle_db1);
    mysql_select_db($db2, $handle_db2);

    $query = "select * from test";
    $which = $handle_db1;
    mysql_query($query, $which);

    $query = "select * from test";
    $which = $handle_db2;
    mysql_query($query, $which);

    Et ça marche! C'est le TRUE dans le 2ème connect qui règle le problème. Si je me souviens bien, il faut MySql 5.

    P@tri.ck
    http://anglais.linguistmail.com/index.php
    4
    1. je veux faire la même chose que toi :

      <?
      $db1 = "prestige_app";
      $db2 = "cobra_app";

      $cnx1 = mysql_connect("host","login","pass");
      $cnx2 = mysql_connect("host","login","pass", TRUE);

      mysql_select_db($db1, $cnx1);
      mysql_select_db($db2, $cnx2);

      $query = "SELECT ID FROM inventaire";

      $which = $cnx1;
      mysql_query($query, $which) or die mysql_error($cnx1);

      $which = $cnx2;
      mysql_query($query, $which) or die mysql_error($cnx2);
      ?>

      cependant cela me donne : Parse error: syntax error, unexpected T_STRING in /homepages/40/d180087966/htdocs/test2base.php on line 17

      Deplus comment as tu fait pour afficher le résultat dans un table ?
      0
    2. @MacSemblerais que je n'ai plus l'erreur. c,est déja ca de fait hehehe

      Mais la je me demende sérieusement comment afficher cela en un seul tableau html.
      0
    3. @Mac$query1= "SELECT name, address FROM $table1";
      $query2= "SELECT city, telephone FROM $table2";

      $result1= mysql_query($query1, $handle_db1);
      $result2= mysql_query($query2, $handle_db2);

      while ($row1= mysql_fetch_array($result1)) $array1[]= $row1;
      while ($row2= mysql_fetch_array($result2)) $array2[]= $row2;

      name : $result1[$i][0]
      address : $result1[$i][1]
      city : $result2[$i][0]
      telephone : $result2[$i][1]
      0
    4. @http://anglais.linguistmail.comDésolé je me suis trompé :

      name : $array1[$i][0]
      address : $array1[$i][1]
      city : $array2[$i][0]
      telephone : $array2[$i][1]
      0
    5. @Mac$query1= "SELECT name, address FROM $table1";
      $query2= "SELECT city, telephone FROM $table2";

      $result1= mysql_query($query1, $handle_db1);
      $result2= mysql_query($query2, $handle_db2);

      while ($row1= mysql_fetch_array($result1)) $array1[]= $row1;
      while ($row2= mysql_fetch_array($result2)) $array2[]= $row2;

      name : $array1[$i][0]
      address : $array1[$i][1]
      city : $array2[$i][0]
      telephone : $array2[$i][1]
      0
  2. Testé et approuvé, cela fonctionne. J'aurais pas dit... :)

    Kalamit,
    Vol au dessus d'un nid de Pika-baffe. :)
    1
    1. Bah merde alors, j ai essayé, ca ne marche pas !!

      Faut dire, je ne suis pas root de la base. Quels doivent etre les droits dans ce cas ?

      Merci, en tout cas, ca m avance, j irai voir l admin pour augmenter mes droits.

      Chmanu
      1
      1. Non, c est ok.
        En fait tout à l heure j ai du essayé mais la connexion n etait pas ouverte sur les deux bases.
        Et y a un truc qui m a fouttu dedans aussi, c'est que le client que j utilise (MySQL Control Center) n'active pas la complétion pour ce genre de requetes.

        En tout cas merci.

        Chmanu
        1
        1. je cherche plutôt à faire une requête sur 2 serveurs différents, genre select * from serveur1.base1.table1 , serveur2.base2.table2 .. . .. .
          Quelqu'un aurait-il une solution ?
          1
          1. Salut,

            Je viens de tomber sur ton post et je cherche moi aussi a pointer une seule requete mysql sur deux bases sur des serveurs différents

            as tu trouvé une solution

            D'avance Merci

            Romu
            0
        2. C'est pour le moins original. T'as essayé ?
          Je vais tester. J'te dirai ca après.

          Kalamit,
          Vol au dessus d'un nid de Pika-baffe. :)
          0
          1. Ah ouais, moi j'etais en root, ca doit etre une question de droit effectivement...
            Par contre, je ne saurais pas te dire lesquels il te faut. A vue de pif, il faudrait que tu ait les meme sur les deux bases avec le meme user.

            Kalamit,
            Vol au dessus d'un nid de Pika-baffe. :)
            0
            1. Bien vu !

              Question subsidiaire : Comment le faire en PHP ?
              Deux mysql_connect ?

              :-)

              Ne vous souciez pas de n'être pas remarqué ; cherchez 
              plutôt à faire quelque chose de remarquable [Confucius]
              0
              1. Oui, deux mysql_connect... :)

                Kalamit,
                Vol au dessus d'un nid de Pika-baffe. :)
                0
              2. A priori, oui, au vu de ce que je viens de poster (en dessous) :
                mysql_connect(db1)
                mysql_connect(db2)

                $sql = "la_requete"
                ... // traitement habituel

                Chmanu
                0
              3. Ben ouais, c'est tout con !
                J'avais une fois lu untruc sur mysql_connect, mais je viens de relire la doc, il n'y a pas de raison que ça ne marche pas.

                Micha.

                Ne vous souciez pas de n'être pas remarqué ; cherchez 
                plutôt à faire quelque chose de remarquable [Confucius]
                0
              4. T as trouvé ça dans quelle rubrique de la doc ?
                Parce que moi, j ai passé un bout de temps à l'chercher !!
                (a moins que tu ne parles de la doc PHP)

                Chmanu
                0
              5. Oui, dans la doc PHP !
                Pour les deux bases, j'avais trouvé ça quelque part sur le net, parce que MySQL ne le documente pas (pas vu en tout cas).

                Ne vous souciez pas de n'être pas remarqué ; cherchez 
                plutôt à faire quelque chose de remarquable [Confucius]
                0