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 :

Jointure ou correspondance entre deux BASES


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Jointure ou correspondance entre deux BASES
    Bonjour à tous,

    Voilà je suis actuellement entrain de refaire le site intranet de la boite pour laquelle je travaille, le souci est que la personne qui s'est chargée du développement de ce même site intranet avant moi a fait ça de manière assez bizarre..

    Il a fait plusieurs bases de données, avec pour chacune une table "administrateurs" qui répertorie donc tous les administrateurs qui pourront agir sur les fonctions correspondantes à la base concernée.

    Or on me demande aujourd'hui, de supprimer toutes ses tables "administrateurs" pour faire une BASE "administrateurs" qui contiendrait une unique TABLE "administrateurs" qui répertorierait les administrateurs de toutes les BASES.. Un peu archaïque à mon sens, et surtout ça me parait impossible.. Je suis loin d'être un champion en matière de bases de données, mais je n'ai encore jamais vu de correspondances entre deux bases de données.. Entre deux tables d'une même base oui, mais pas entre deux tables, de deux bases différentes..
    un *** WHERE table1.champ = table2.champ OK, mais: ***WHERE base1.table.champ = base2.table.champ je n'ai encore jamais vu ça, et pour moi c'est impossible..

    J'ai conscience que ce post n'est pas des plus compréhensibles au premier coup d'oeil, veuillez m'en excuser par avance, j'espère quand même que vous arriverez à éclairer ma lanterne.. Il se peut que je me trompe totalement et que la correspondance entre deux bases soit possible, mais j'ai un peu cherché sur google depuis que j'ai pris mon service ce matin, et j'avoue n'avoir pas trouvé grand chose, pour ne pas dire rien du tout.

    Merci par avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En MySQL, c'est tout à fait possible de tester une correspondance entre deux bases.

    Mais au passage, je signale que la syntaxe normalisée depuis 1992 pour les jointures utilise le mot clé JOIN.

    on peut donc tout à fait écrire la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.colA, b.colB
    FROM base1.tableA AS a
    INNER JOIN base2.tableB AS b ON a.id1 = b.id1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Citation Envoyé par CinePhil Voir le message
    En MySQL, c'est tout à fait possible de tester une correspondance entre deux bases.
    Si je peux me permettre ce complément implicite, entre deux bases d'un même serveur.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Oui oui, les bases sont toutes sur le même serveur, mais je pensais vraiment pas possible la correspondances entre deux tables de deux bases différentes. Je vais m'y essayer vu qu'on me dit que c'est possible.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bon, j'ai testé un truc tout bête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $resultat = 'SELECT ttest1.champ1 FROM btest1.ttest1, btest2.ttest2 WHERE btest1.ttest1.champ2 = btest2.ttest2.champ2';
    $resultat = mysql_query($resultat) or die(mysql_error());
    echo $resultat;
    Pour me donner l'id du tuple de la table1 de la base1 ayant le même champ2 que la table2 de la base2, mais pour seul résultat j'ai un joli: Resource id #4

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    INNER JOIN et pas cet horrible FROM plusieurs tables WHERE !
    Au bout de 17 ans, il serait peut-être temps de se mettre à la syntaxe normalisée !

    Et si tu n'utilises pas d'alias, je pense que tu dois répéter base.table.colonne dans le SELECT et pas seulement table.colonne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Ah pas taper pas taper ! J'ai appris avec les FROM WHERE moi n'est jamais vu le INNER JOIN :p
    Sinon ça fonctionne pas non plus en ajoutant btest1.

    Je vais essayer ta syntaxe

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bon.. Après avoir INNERJOINisé et aliasisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $resultat = 'SELECT a.champ1 FROM btest1.ttest1 AS a INNER JOIN btest2.ttest2 as b ON a.champ2 = b.champ2';
    $resultat = mysql_query($resultat) or die(mysql_error());
    echo $resultat;
    J'ai le même résultat...
    /me va se pendre avec son RJ45..

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Là ce n'est plus un problème MySQL, mais un problème PHP.
    mysql_query() retourne une ressource PHP qu'il faut parcourir avec l'une des fonctions de parcours de la famille mysql_fetch_
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  10. #10
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    INNER JOIN et pas cet horrible FROM plusieurs tables WHERE !
    Au bout de 17 ans, il serait peut-être temps de se mettre à la syntaxe normalisée !

    Et si tu n'utilises pas d'alias, je pense que tu dois répéter base.table.colonne dans le SELECT et pas seulement table.colonne.
    Pourtant la méthode avec le mot clé JOIN est quand même carrément moins lisible je trouve :/
    Enfin perso je l'utilise jamais.....

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kedare Voir le message
    Pourtant la méthode avec le mot clé JOIN est quand même carrément moins lisible je trouve :/
    Faux !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT les colonnes
    FROM uneTable
    JOIN uneAutreTable ON condition de jointure
    WHERE condition de restriction
    Ce n'est pas plus compliqué que ça.
    Alors que mélanger les conditions de restrictions et de jointure dans le WHERE, ça faborise la survenue d'erreurs... et de messages sur le forum pour demander à aider à les résoudre.
    Surtout quand les jointures sont multiples et avec plusieurs instances de tables, la syntaxe obsolète FROM WHERE est un piège qui fait facilement oublier une instance de table ou une condition dejointure.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Ok, donc désolé de pas avoir répondu plus tôt j'ai quitté le boulot plus tôt vendredi.
    Donc effectivement ça fonctionne grâce au fetch array, j'y avais pas pensé vu que je devais récupérer qu'une valeur, je pensais qu'un simple echo $resultat aurait fonctionné

    Alors que mélanger les conditions de restrictions et de jointure dans le WHERE, ça faborise la survenue d'erreurs...
    Entièrement d'accord, je trouve aussi que c'est plus pratique à utiliser, plus carré en tout cas. Faut juste que je me familiarise avec maintenant..

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Jointure entre deux bases
    Par misakilou dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/07/2012, 10h18
  2. [MySQL] Jointure entre deux bases
    Par gantec dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/05/2009, 08h33
  3. Requête entre deux bases
    Par dcollart dans le forum Informix
    Réponses: 2
    Dernier message: 22/05/2006, 08h54
  4. correspondance entre noms (bases et tables) et répertoires
    Par Eärendil dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/05/2005, 14h21
  5. copie de tables entre deux bases
    Par rlgrand dans le forum Débuter
    Réponses: 3
    Dernier message: 27/12/2004, 12h12

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