IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comment lier 2 DBs


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut Comment lier 2 DBs
    Bonjour,

    comment faire pour pouvoir utiliser 2 tables qui sont dans 2 bases distinctes dans la meme requete SQL (autrement qu'en le faisant dans le code applicatif), autrement dit je cherche plutot quelque chose à inserer dans le script de creation des bases?

    (user1/pass1)
    Server A Base A table 1

    (user2/pass2)
    Server A Base B table 2

    select * from A, B where A.1.id = A.2.id;

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Par défaut
    des serveurs liés.

    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from serveur1.base1.schema.table inner join serveur2.base1.schema.table on ....

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Merci,

    mais je n'ai pas été complet en fait il y a 3 tables en jeu:

    (user1/pass1)
    Server X Base A table 1 et 2

    (user2/pass2)
    Server X Base B table 3

    select A.1.nom, A.2.poste, B.3.salaire
    from A.1, A.2, B.3
    where A.1.id = B.3.id;


    là le "join" proposé ne s'applique plus je pense.
    Merci

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Utilise la syntaxe suivante pour définir tes tables vu que tes dbs se trouvent sur le meme serveur:

    dbName.schemaName.table

    Note que cela n'est pas necessaire pour les tables qui sont contenues dans la DB ou la query tourne.

    Tu peux bien entendu aliaser tes tables comme habituellement.




    edit : correction d'orthographe

  5. #5
    Invité
    Invité(e)
    Par défaut
    Si les bases sont dans des instances différentes, utilisez les serveurs liés.

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    je dois etre trop debile.....

    ça ne fonctionne pas, ci dessous le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    $cnx2 = mysql_connect($hote, 'miliemilimg', $pwd)
    					or die(mysql_error());
    $ret2 = mysql_select_db("miliemilimg")
    				or die(mysql_error());
     
    $cnx1 = mysql_connect($hote, 'miliemilbijoux', $pwd)
    					or die(mysql_error());
    $ret1 = mysql_select_db("miliemilbijoux")
    				or die(mysql_error());
     
    $req = "SELECT t1.det_nom, t2.img_id, t2.img_thumb_nom, t3.imgth_id
    FROM miliemilbijoux.detail t1, miliemilimg.miliemilimg.image t2, miliemilbijoux.imageth t3
    WHERE t1.det_classe = '".$context."'
    and t2.img_nom = t1.det_nom
    and t3.imgth_nom = t2.img_thumb_nom";
     
    $ret = mysql_query($req) or die(mysql_error());
    L'erreur est la suivante:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.image t2, miliemilbijoux.imageth t3 WHERE t1.det_classe = 'accessoires'.

    Si quelqu'un à une idée, merci d'avance.

  7. #7
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Je ne suis pas certain de la syntaxe utilisée par MySQL.

    FROM miliemilbijoux.detail t1, miliemilimg.miliemilimg.image t2, miliemilbijoux.imageth t3
    Pour quelle raison définis tu t2 comme étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    miliemilimg.miliemilimg.image
    Alors que tu définis t1 comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    miliemilbijoux.detail
    ?

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Parceque je suis connecté en dernier lieu sur miliemilbijoux et que je pense qu'en conseéquence la requete tourne sur cette base, donc pas besion de preciser.

    Ceci dit ça n'a pas trop d'importance dans ce contexte parceque si je rajoute miliemilbijoux partout de la meme façon que pour miliemilimg, la meme erreur est detectée sur la premiere table (t1).

  9. #9
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Ta question concerne MySQL, je ne peux pas t'aider plus au niveau de la syntaxe.
    Vérifie tes droits sur les 2 DB, tu dois avoir l'acces en lecture minimum.
    Est ce que ta version de MySQL t'autorise à faire des requètes d'une DB à l'autre ? Est ce que ton serveur est configuré pour l'autorisé ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Vous êtes dans le forum Microsoft SQL Server, pas MySQL. Est-ce que votre question porte sur MySQL ? Dans ce cas je déplace le post dans le bon forum !

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Ok merci Kuzco!

    Bien alors est-ce que quelqu'un à une idée dans ce forum, pour me sortir de la panade?
    Merci

  12. #12
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    Sous MySQL, schema = base, on ne distingue pas ces deux notions contrairement à SQL Server.

    Donc une jointure sur 2 tables situées dans des bases (schemas) différentes sera du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM base1.table1 t1
    INNER JOIN base2.table2 t2
    ON t1.id = t2.id
    Ceci dit les 2 bases doivent être situées sur le même serveur, à moins d'utiliser des tables FEDERATED.

  13. #13
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Merci,

    oui j'avais vu que schema = table, ceci dit je ne savais pas que du coup, ce n'était pas à specifier dans la requete.

    Par contre là il reste un probleme, puisque j'ai 3 tables en jeu dans la requete je ne peux pas utiliser une jointure il me semble.

  14. #14
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut pas de solutions, j'essaye de formuler autrement...
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $cnx2 = mysql_connect($hote, 'miliemilimg', $pwd2, TRUE)
         or die(mysql_error());
        $ret2 = mysql_select_db("miliemilimg", $cnx2)
         or die(mysql_error());
     
    $cnx1 = mysql_connect($hote, 'miliemilbijoux', $pwd1, TRUE)
         or die(mysql_error());
        $ret1 = mysql_select_db("miliemilbijoux", $cnx1)
         or die(mysql_error());
     
    $req = "SELECT t1.det_nom, t2.img_id, t2.img_thumb_nom, t3.imgth_id
        FROM miliemilbijoux.detail t1, miliemilimg.image t2, miliemilbijoux.imageth t3
        WHERE t1.det_classe = '".$context."'
        and t2.img_nom = t1.det_nom
        and t3.imgth_nom = t2.img_thumb_nom";
     
        $ret = mysql_query($req, $cnx1)
         or die(mysql_error());
    l'erreur est la suivante:

    SELECT command denied to user 'miliemilbijoux'@'localhost' for table 'image'

Discussions similaires

  1. Comment lier 2 librairies ?
    Par Vroom dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 24/01/2005, 16h39
  2. [Tcl/Tk] Comment lier C à Tcl/Tk ?
    Par jaabouc dans le forum Tcl/Tk
    Réponses: 3
    Dernier message: 28/08/2004, 22h11
  3. Réponses: 6
    Dernier message: 27/05/2004, 11h41
  4. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo