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 :

requette avec jointure et affichage redondant


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Par défaut requette avec jointure et affichage redondant
    bonjour

    j'ai une problématique d'affichage ou de requette avec jointure
    j'ai les tables suivantes
    RANDONNEUR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID_RANDONNEUR  	int(4)  	    	 
    PWD 	int(8)
    NOM_PRENOM 	varchar(64) 
    VILLE 	varchar(32)
    EMAIL 	varchar(64)
    FLAG 	varchar(1)
    RANDO_A_FAIRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID_RANDO  	int(4)
    DUREE 	varchar(6)
    NIVEAU 	varchar(6)
    DEPART 	varchar(128)
    LIBELLE 	varchar(128)
    DATE 	varchar(32)
    TXT 	text 	
    CARTE 	varchar(32)
    FLAG 	varchar(1)
    PARTICIPANT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID_PARTICIPANT  	int(4)
    ID_RANDO 	int(4)
    ID_RANDONNEUR 	int(4)
    le but est de ressortir les participants qui se sont inscrits pour une ou plusieurs randos voir le lien http://reunion-rando.com/index.php?menu=pei

    seulement j'ai une redondance des noms
    je retouve les inscrits de la rando 1 dans la rando 2

    ma requette qui genere les noms (NOM_PRENOM et VILLE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $result=" SELECT DISTINCT RANDONNEUR.NOM_PRENOM,RANDONNEUR.VILLE ";
    $result.="FROM RANDONNEUR INNER JOIN PARTICIPANT ON RANDONNEUR.ID_RANDONNEUR=PARTICIPANT.ID_RANDONNEUR ";
    $result.="where PARTICIPANT.ID_RANDO = '$resa' ";
    $resa = ID_RANDO

    une petite idée..... est ce un probleme de codage ou de jointure

    merci a+

  2. #2
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Est-ce que les trois colonnes de la table PARTICIPANT constituent une clef unique identifiante pour cette table ?
    Sinon, ce devrait être le cas, car, conceptuellement, le DISTINCT est superfétatoire.
    Qu'est-ce qui permet d'affirmer que certains affichages ne concernent pas la bonne randonnée ? (puisqu'ID_RANDO ne fait pas partie du SELECT)

    A priori, la requête (INNER JOIN) ne peut retourner que des enregistrements qui remplissent la condition de jointure ON et celle du filtre WHERE.
    Mais est-on sûr de ce qui est transmis à MySQL ?
    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)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Par défaut
    la clause where est bien remplie et prend bien en compte ID_RANDO
    resultat d'un echo
    where PARTICIPANT.ID_RANDO = '1' pour la rando 1
    where PARTICIPANT.ID_RANDO = '2' pour la rando 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sur la table PARTICIPANT
    ID_PARTICIPANT est une clé primaire avec une option auto_increment
    ID_RANDO 
    ID_RANDONNEUR
    code enregistrant les datas de la table PARTICIPANT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $verif = "select ID_RANDONNEUR,PWD from RANDONNEUR where PWD = '$pwd' and flag = 'Y'";	
    $item = mysql_fetch_assoc(rando($verif));
    if(($item != FALSE) and ($pwd != ""))
      {
      $rec = "insert into PARTICIPANT (ID_RANDO,ID_RANDONNEUR) values ('$id_rando','".$item['ID_RANDONNEUR']."') ";   
      rando($rec);
      }
    code affichant les participants le bug est peut etre là ?
    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
     
    $result=" SELECT RANDONNEUR.NOM_PRENOM,RANDONNEUR.VILLE ";
    $result.="FROM RANDONNEUR LEFT JOIN PARTICIPANT ON RANDONNEUR.ID_RANDONNEUR=PARTICIPANT.ID_RANDONNEUR ";
    $result.="where PARTICIPANT.ID_RANDO = '$resa' ";	 
     
    echo $result;
     
    $aff_randonneur = rando($result);	
    while($data = mysql_fetch_assoc($aff_randonneur)) { $tablo[]=$data; }	 
     
    $nbcol=3; //détermine le nombre de colonnes
     
    echo '<table border="0" valign="top" width="600" cellspacing="0" cellpadding="0">';
    $nb=count($tablo);
    for($i=0;$i<$nb;$i++)
       {
       //les valeurs à afficher
       $nom_prenom=$tablo[$i]['NOM_PRENOM']; 
       $ville=$tablo[$i]['VILLE'];
     
       if($i%$nbcol==0)
       echo '<tr>';
       echo '<td align="center">';
       echo'<b>'.$nom_prenom.'</b><br>'.$ville.'<br><br>';
       echo'</td>';
     
       if($i%$nbcol==($nbcol-1))
       echo '</tr>';
       }
    echo '</table>';

  4. #4
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par gilles974 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sur la table PARTICIPANT
    ID_PARTICIPANT est une clé primaire avec une option auto_increment
    ID_RANDO 
    ID_RANDONNEUR
    Honnêtement à quoi sert ID_PARTICIPANT, tu ferais mieux de rendre ID_RANDO,ID_RANDONNEUR clef primaire puisqu'un randonneur ne peut participer qu'une fois à une randonnée, non ?
    Pour le reste, je regarde.
    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)

  5. #5
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Peux-tu nous afficher le résultat d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <pre><?php print_r($tablo);?></pre>
    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)

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Par défaut
    je met toujours un champ ID_xxxx en cle primaire par habitude. mauvaise peut etre ?

    je passe ID_RANDO,ID_RANDONNEUR en clef primaire

    le result de print_r($tablo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Array ( [0] => Array ( [NOM_PRENOM] => titi [VILLE] => st gilles les bains ) [1] => Array ( [NOM_PRENOM] => mini [VILLE] => St Gilles les Hauts ) ) 1
    j'ai oublier de preciser dans la table PARTICIPANT
    ID_RANDONNEUR peut etre inscrit plusieurs fois pour differente ID_RANDO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID_PARTICIPANT 	ID_RANDO 	ID_RANDONNEUR
    1 	1 	1
    2 	1 	2
    3      2       2
    4 2 1

  7. #7
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Ton print_r ne nous apprends rien puisque tu n'as pas ajouté l'identifiant de la rando dans le SELECT.
    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)

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

Discussions similaires

  1. [AC-2007] affichage redondant avec cette analyse
    Par niamo dans le forum Modélisation
    Réponses: 2
    Dernier message: 28/05/2010, 11h24
  2. affichage de sous requette avec foreach et while
    Par keusty78 dans le forum Langage
    Réponses: 11
    Dernier message: 17/10/2009, 12h42
  3. problème avec jointure dans ma requette
    Par sinifer dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/07/2009, 16h48
  4. requette udpate avec jointure
    Par comme de bien entendu dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/02/2008, 17h45
  5. Réponses: 4
    Dernier message: 23/07/2007, 17h43

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