Problemes doublons jointures avec WHERE

Résolu
Bonjour à tous et à toutes,

Je suis débutant en PHP et j'ai actuellement un petit probleme.

Je fais actuellement un programme qui me permet de créer un tableau d'élève avec toutes ses caractéristiques y compris les enseignants qu'il a eu depuis qu'il a été inscrit dans l'école.

Je ne mettrais pas tout le programme, qui est très long à lire, je vais juste écrire la requête SQL:

$sql = 'SELECT E.E_MATR, E_NOM, E_PREN, E_SEXE, E_DATNAISS, E_LIEUNAIS, E_PERPREN, E_PERNOM, E_MERPREN, E_MERNOM, SCO_ANN, SCO_PROF ,E_INSCRIPT

FROM tab_asm_elv E, tab_scolar S

WHERE E.E_MATR=S.E_MATR

GROUP BY E_MATR

ORDER BY E_MATR ';

Problème: cette requête ne me permet de n'afficher que un seul enseignant par élève
alors que comme je l'ai dit plus haut, un élève a plusieurs enseignants.

J'aimerais savoir comment faire pour pouvoir,sans doublons, avoir les caractéristiques d'un élève ainsi que tous les enseignants qu'il a eu dans son cursus.

Merci beaucoup pour vos conseils.

13 réponses

  1. Excusez moi pour ce retard, j'ai enfin trouvé la requête a faire pour pouvoir afficher tous les professeurs d'un seul élève.

    Dans un premier temps je crée cette requête:

    $sql = 'SELECT E.E_MATR, E_NOM, E_PREN, E_SEXE, E_DATNAISS, E_LIEUNAIS, E_PERPREN, E_PERNOM, E_MERPREN, E_MERNOM, SCO_ANN, SCO_PROF ,E_INSCRIPT FROM tab_asm_elv E, tab_scolar S WHERE E.E_MATR=S.E_MATR GROUP BY E_MATR ORDER BY E_NOM';

    Ensuite quand je clique sur le nom j'appelle cette reqûete:

    $sql2 = 'SELECT S.SCO_PROF, S.SCO_ANN FROM tab_asm_elv E, tab_scolar S WHERE E.E_MATR="'.$matricule.'" AND E.E_MATR=S.E_MATR ORDER BY SCO_ANN';

    Et sa fonctionne.
    Merci pour votre aide
    1. Bonjour et merci de ta réponse dna.factory

      Je connais la différence entre le GROUP BY et le ORDER BY

      Le problème quand je fais ma requête avec le ORDER BY (et ce qui est logique)

      j'obtiens ce tableau

      10 Aléxis RETOUR G 1992-01-30 Le Blanc-Mesnil TRUTIE Annick

      10 Aléxis RETOUR G 1992-01-30 Le Blanc-Mesnil CUZIN Mich

      10 Aléxis RETOUR G 1992-01-30 Le Blanc-Mesnil TRUTIE Annick

      10 Aléxis RETOUR G 1992-01-30 Le Blanc-Mesnil TRUTIE Annick

      et moi je veux que sa affiche

      10 Aléxis RETOUR G 1992-01-30 Le Blanc-Mesnil

      et que quand je cliques sur "Aléxis"

      Je voudrais que sa affiche

      Aléxis
      RETOUR
      G
      1992-01-30
      Le Blanc-Mesnil

      TRUTIE Annick
      CUZIN Mich
      TRUTIE Annick
      TRUTIE Annick
      1. Modérateur
        Ok, mais ce n'est pas à la requête de faire ça, c'est à ton programme

        tu fais une première requête

        select nom from eleve

        pour générer ton affichage.
        et quand tu cliques sur eleve, tu appelle une autre requête qui fera

        select professeur.nom
        from professeur, eleve
        where eleve.id=prof.id_eleve (j'avais inversé dans l'autre)
        and eleve.nom=$Nom_eleve
    2. Modérateur
      GROUP BY E_MATR

      Problème: cette requête ne me permet de n'afficher que un seul enseignant par élève

      en même temps, c'est le role du group by...
      il ne faut pas confondre group by et ordre by
      ici on veut juste faire un order by pour 'regrouper' l'affichage.

      la requette est extrêmement simple:

      select eleve.nom, prof.nom
      from prof, eleve
      where prof.id=eleve.id_prof

      (pour du 1,inf.
      Si jamais on veut du 0,inf (un éleve oublié qui n'a aucun prof, ou un prof faignant qui n'a aucun eleve, il faudra utiliser un outer join)
      Stop failing the turing test !
      1. Désolé d'avoir autant tarder à répondre.

        C'est justement là le problème, je ne vois pas comment faire pour obtenir ce que je veux.
        1. Normal, mais tu n'arriveras pas faire ce que tu souhaites en une requete à mon avis ...

          $sql = 'SELECT E.E_MATR, E.E_NOM, E.E_PREN, E.E_SEXE, E.E_DATNAISS, E.E_LIEUNAIS, E.E_PERPREN, E.E_PERNOM, E.E_MERPREN, E.E_MERNOM, E.E_INSCRIPT, S.SCO_ANN, S.SCO_PROF

          FROM tab_asm_elv E, tab_scolar S

          WHERE E.E_MATR=S.E_MATR
          GROUP BY E.E_MATR, E.E_NOM, E.E_PREN, E.E_SEXE, E.E_DATNAISS, E.E_LIEUNAIS, E.E_PERPREN, E.E_PERNOM, E.E_MERPREN, E.E_MERNOM, E.E_INSCRIPT
          ORDER BY E.E_MATR ';

          1. Deja fait
            Cela crée des doublons

            exemple:

            alexis retour prof: eric
            alexis retour prof: jeremy
            1. Oui mais la j'ai rajouté des E. et S. devant les champs.

              Sinon essaye sans le group by

              Jérémy
              1. La requête fonctionne le probleme est qu'elle n'affiche qu'un seul prof pour chaque eleve
                alors que j'aimerais que la requête m'affiche tous les profs d'un eleve
                1. Ok donc à priori ta requete devrait foncitonner ...

                  $sql = 'SELECT E.E_MATR, E.E_NOM, E.E_PREN, E.E_SEXE, E.E_DATNAISS, E.E_LIEUNAIS, E.E_PERPREN, E.E_PERNOM, E.E_MERPREN, E.E_MERNOM, S.SCO_ANN, S.SCO_PROF, E.E_INSCRIPT

                  FROM tab_asm_elv E, tab_scolar S

                  WHERE E.E_MATR=S.E_MATR
                  GROUP BY E.E_MATR
                  ORDER BY E.E_MATR ';

                  1. Elle représente les enseignants affiliés à un élève
                    Elève représenté ici par son matricule pour pouvoir faire la jointure avec la table tab_asm_elv

                    Et je n'ai pas créé les tables mais je l'ai est importée
                    1. Merci de ta réponse jeremy

                      J'ai créé deux tables:

                      la table tab_asm_elv qui a pour composants:

                      E_MATR, E_NOM, E_PREN, E_SEXE, E_DATNAISS, E_LIEUNAIS, E_PERPREN, E_PERNOM, E_MERPREN, E_MERNOM, E_INSCRIPT

                      ET une table tab_scolar avec pour composants:

                      E_MATR, SCO_PROF, SCO_ANN

                      Pour exemple le programme affiche:

                      Aléxis
                      RETOUR
                      M
                      xx/xx/xxxx,
                      xxx
                      prenompere
                      nompere
                      prenommere
                      nommere
                      enseignant
                      1. Salut !

                        Peux tu mettre la strucure de tes tables stp :)

                        Mais a première vue ce n'est pas posible avec tes tables actuelles.

                        Quand tu dis "un élève a plusieurs prof" cela se traduit par une table intermédiaire entre la table prof et la table élève.