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 :

Aide requete imbriquée sur 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Aide requete imbriquée sur 2 tables
    Bonjour,

    Je recontre un probleme pour réaliser une requete. Je realise un site internet concernant mon arbre genealogique et pour chaque personne j'affiche les infos contenues dans la tavle individu. J'ai un probleme pour afficher la personne avec qui la personne de la page en question est mariée. je m'explique :

    J'ai 2 tables : mariage et individu.

    individu(individu, nom, prenom, sexe, date_n, lieu_n, date_m, lieu_m, pere,mere,profession). individu est un int et est la clé primaire, pere et mere sont des clés etrangère sur la colonne individu de la table individu ce sont des int donc.

    mariage(numero,date,lieu,conjoint1,conjoint2) ou conjoint1 et conjoint 2 sont des clés etrangère sur la colonne individu de la table individu ce sont des int.


    Exemple de page : http://genealogiedemoi.free.fr/index...php?individu=8

    grâce a un get je recupere l'identifiant de la personne de la page et la met dans la variable $individu -> $individu = $_GET['individu'];

    J'aimerais pouvoir afficher le nom et prenom de la personne à laquelle la personne de la page est mariée. Mais je n'arrive pas du tout à faire ma requete je m'embrouille, j'arrive a afficher le lieu et la date mais je n'arrive pas a recuperer dans la meme requete les nom $ prenom du conjoint qui sont dans une autre table. De plus, il faut tester si la personne de la page est le conjoint1 ou le conjoint2. Il faut pouvoir traiter le cas ou un individu s'est marié plusieurs fois.

    j'ai juste ecrit pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $reponse= mysql_query(
    "SELECT * 
    FROM mariage 
    WHERE(conjoint1 in (SELECT conjoint1 FROM mariage WHERE conjoint2='$individu') 
    OR conjoint2 in (SELECT conjoint2 FROM mariage WHERE conjoint1='$individu'));");
    avec ensuite une boucle while ($donnees = mysql_fetch_array($reponse)) pour afficher le resultat sous forme de liste par ex.


    J'espere que vous avez compris ce que j'essaie de faire j'ai du mal à expliquer. Merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Voici une requête (je suis sûr qu'il existe d'autres solutions) qui donne la liste du conjoint (si il existe) de tous les individus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select i.individu, i.nom, i.prenom, i2.individu, i2.nom, i2.prenom
    from individu i
    left join mariage m on (i.individu = m.conjoint1 or i.individu = m.conjoint2)
    left join individu i2 on (m.conjoint1 = i2.individu or m.conjoint2 = i2.individu)
    where i.individu <> i2.individu
    Il ne reste plus qu'à filtrer sur le code de l'individu de la page .

    ced

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup je vais tester dessuite ! Mes cours de sgbd remonte à quelques temps deja et je ne suis pas experte, j'ai eu du mal !

    EDIT : j'ai tenté, ca m'affiche bien le conjoint par contre ca m'affiche en boucle et j'ai du mal à voir pourquoi il boucle comme ca


    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
    $reponse= mysql_query("SELECT i2.nom, i2.prenom, date, lieu 
    FROM individu i 
    LEFT JOIN mariage m ON ('$individu' = m.conjoint1 OR '$individu' = m.conjoint2) 
    LEFT JOIN individu i2 ON (m.conjoint1 = i2.individu OR m.conjoint2 = i2.individu) 
    WHERE '$individu' <> i2.individu;");
     
    	while ($donnees = mysql_fetch_array($reponse))
    	{
    	?>
     
    		<ul><li>
    			<ul><li><u>date </u>: <?php echo $donnees['date']; ?></li>
    				<li><u>lieu </u>: <?php echo $donnees['lieu']; ?></li>
    				<li><u>conjoint </u>: <?php echo $donnees['nom']; ?> <?php echo $donnees['prenom']; ?></li>
    			</ul>
    			</li>
    		</ul>

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    C'est dû au fait que le filtrage sur l'individu de la page doit se faire dans la clause WHERE, et non pas dans les conditions de jointure.
    Essaie plutôt avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reponse= mysql_query("SELECT i.individu, i.nom, i.prenom, i2.individu, i2.nom, i2.prenom
    FROM individu i
    LEFT JOIN mariage m ON (i.individu = m.conjoint1 OR i.individu = m.conjoint2)
    LEFT JOIN individu i2 ON (m.conjoint1 = i2.individu OR m.conjoint2 = i2.individu)
    WHERE i.individu <> i2.individu
    AND i.individu = ".$individu);
    ced

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci enormement ca marche nickel !!!

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

Discussions similaires

  1. requete imbriquée sur une meme table
    Par ZN dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 13/08/2010, 17h43
  2. [MySQL] requete imbriqué sur 2 tables
    Par sinifer dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/04/2009, 15h55
  3. problème requete imbriqué sur une seule table
    Par vanhouten dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/01/2009, 16h35
  4. Requete COUNT sur 3 tables
    Par Le-Cortex dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h39
  5. Requete imbriquée sur Firebird ou Interbase
    Par Thib dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 09h00

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