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

Langage SQL Discussion :

probleme de jointure avec left join


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut probleme de jointure avec left join
    Bonjour,

    J'ai un problème pour faire une requête SQL avec LEFT JOIN.

    Je sais faire la requête SQL de jonction entre deux tables. Mais j'ai un problème lorsque la deuxième table possède plusieurs lignes qui peuvent être liées au numéro de jointure de la table a.

    exemple avec base de donnée


    base de donnée

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    CREATE DATABASE `exmple` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
    USE `exmple`;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `cheveux`
    --
     
    CREATE TABLE `cheveux` (
      `n_inscr` int(11) NOT NULL,
      `n_chev` int(11) NOT NULL auto_increment,
      `cheveux` varchar(250) NOT NULL,
      PRIMARY KEY  (`n_chev`),
      KEY `n_inscr` (`n_inscr`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `cheveux`
    --
     
    INSERT INTO `cheveux` (`n_inscr`, `n_chev`, `cheveux`) VALUES
    (1, 1, 'Blond'),
    (3, 2, 'Chatain');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `couleur`
    --
     
    CREATE TABLE `couleur` (
      `n_inscr` int(11) NOT NULL,
      `n_yeux` int(11) NOT NULL auto_increment,
      `couleur` varchar(250) NOT NULL,
      PRIMARY KEY  (`n_yeux`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    --
    -- Contenu de la table `couleur`
    --
     
    INSERT INTO `couleur` (`n_inscr`, `n_yeux`, `couleur`) VALUES
    (2, 1, 'bleu'),
    (4, 2, 'vert'),
    (4, 3, 'rouge'),
    (4, 4, 'marron');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `inscrit`
    --
     
    CREATE TABLE `inscrit` (
      `n_inscr` int(11) NOT NULL auto_increment,
      `surnom` varchar(250) NOT NULL,
      PRIMARY KEY  (`n_inscr`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    --
    -- Contenu de la table `inscrit`
    --
     
    INSERT INTO `inscrit` (`n_inscr`, `surnom`) VALUES
    (1, 'lili_256'),
    (2, 'lola_16'),
    (3, 'pat_11'),
    (4, 'dam_16');
    exemple .php

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    session_start();
    mysql_connect("localhost","root","");
    mysql_select_db('exmple');
    $sqe=mysql_query("SELECT a.n_inscr,a.surnom,b.cheveux,c.couleur FROM inscrit a LEFT OUTER JOIN cheveux b ON a.n_inscr=b.n_inscr LEFT OUTER JOIN couleur c ON a.n_inscr=c.n_inscr");
    $nc=mysql_num_rows($sqe);$i=0;
    while($rb=mysql_fetch_object($sqe)){
                           $var[$i][0]=$rb->n_inscr;
                           $var[$i][1]=$rb->surnom;
                           $var[$i][2]=$rb->cheveux;
                   $var[$i][3]=$rb->couleur;
                           $i++;
                                       }
    for($i=0;$i<$nc;$i++){
                    if($var[$i][2]==""){unset($var[$i][2]);}/*ici j'efface le vide dans le tableau*/
                    if($var[$i][3]==""){unset($var[$i][3]);}/*ici j'efface le vide dans le tableau*/
                         }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans titre</title>
     
    </head>
     
    <body>
     
    <?php 
    $vir=array_merge($var);
    echo"<textarea cols=235 rows=62>";
    print_r($vir);
    echo"</textarea>";
    ?>
    </body>
    </html>
    Affichage du résultat
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => lili_256
                [2] => Blond
            )
     
        [1] => Array
            (
                [0] => 2
                [1] => lola_16
                [3] => bleu
            )
     
        [2] => Array
            (
                [0] => 3
                [1] => pat_11
                [2] => Chatain
            )
     
        [3] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => vert
            )
     
        [4] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => rouge
            )
     
        [5] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => marron
            )
     
    )
    Mon problème se situe ici.

    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
    20
    21
     
        [3] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => vert
            )
     
        [4] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => rouge
            )
     
        [5] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => marron
            )
    je souhaiterai faire une requête sql de jointure me donnant se résultat.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => lili_256
                [2] => Blond
            )
    
        [1] => Array
            (
                [0] => 2
                [1] => lola_16
                [3] => bleu
            )
    
        [2] => Array
            (
                [0] => 3
                [1] => pat_11
                [2] => Chatain
            )
    
        [3] => Array
            (
                [0] => 4
                [1] => dam_16
                [3] => array 
                            (
                                 [0]=> vert
                                 [1]=> rouge
                                 [2]=> marron 
                            )
            )
    
    )
    Donc mon problème est que je sais joindre deux tables si elles n'ont qu'une lignes chacune en égaliter (n_inscr).
    Mais je ne trouve pas de solution pour une jointure d'une table A à une autre table B ayant plusieurs lignes pour le même numéro de jointure (n_inscr).

    1 ère question : est ce possible ?
    2 ème question : si oui quel méthode faut-il utiliser pour avoir le résultat ci-dessus?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Quelle requête SQL utilisez vous pour l'instant pour ramener vos données ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sqe=mysql_query("
           SELECT a.n_inscr,a.surnom,b.cheveux,c.couleur 
           FROM inscrit a 
           LEFT OUTER JOIN cheveux b ON a.n_inscr=b.n_inscr 
           LEFT OUTER JOIN couleur c ON a.n_inscr=c.n_inscr
                           ");
    ou celle la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sqe=mysql_query("
           SELECT a.n_inscr,a.surnom,b.cheveux,c.couleur  
           FROM inscrit AS a 
           LEFT JOIN cheveux AS b ON a.n_inscr = b.n_inscr 
           LEFT JOIN couleur AS c ON a.n_inscr = c.n_inscr
                            ");

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    J'ai trouvé la solution.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Si quelqu'un a le meme problème que toi, il sera surement ravi de savoir que tu as trouvé la solution, peut-être aurait-il aimé savoir laquelle, pour transposer dans son contexte.
    A+
    Soazig

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

Discussions similaires

  1. probleme avec LEFT JOIN multi tables
    Par hinsano dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/07/2006, 06h36
  2. Problème de jointure avec INNER JOIN et LEFT OUTER JOIN
    Par tonio-lille dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/02/2006, 12h45
  3. Probleme de NULL avec LEFT OUTER JOIN
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 14h42
  4. requete avec left join et group by
    Par slc dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/09/2004, 18h03
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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