Problemes doublons jointures avec WHERE

Résolu
alexis972 Messages postés 6 Statut Membre -  
alexis972 Messages postés 6 Statut Membre -
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. alexis972 Messages postés 6 Statut Membre
     
    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
    0
  2. jeremy.s Messages postés 1248 Statut Membre 79
     
    La table scloar représente les prof ?
    0
  3. alexis972 Messages postés 6 Statut Membre
     
    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
    0
  4. jeremy.s Messages postés 1248 Statut Membre 79
     
    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 ';

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. alexis973
     
    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
    0
  7. jeremy.s Messages postés 1248 Statut Membre 79
     
    Oui mais la j'ai rajouté des E. et S. devant les champs.

    Sinon essaye sans le group by

    Jérémy
    0
  8. alexis972
     
    Deja fait
    Cela crée des doublons

    exemple:

    alexis retour prof: eric
    alexis retour prof: jeremy
    0
  9. jeremy.s Messages postés 1248 Statut Membre 79
     
    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 ';

    0
  10. alexis972 Messages postés 6 Statut Membre
     
    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.
    0
  11. dna.factory Messages postés 19941 Date d'inscription   Statut Modérateur Dernière intervention   1 621
     
    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 !
    0
  12. alexis972 Messages postés 6 Statut Membre
     
    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
    0
    1. dna.factory Messages postés 19941 Date d'inscription   Statut Modérateur Dernière intervention   1 621
       
      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
      0
    2. jeremy.s Messages postés 1248 Statut Membre 79
       
      +1
      0
  13. alexis972 Messages postés 6 Statut Membre
     
    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
    0
  14. jeremy.s Messages postés 1248 Statut Membre 79
     
    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.
    -1