Problemes doublons jointures avec WHERE

Résolu
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

13 réponses

alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
La table scloar représente les prof ?
0
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   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

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

Posez votre question
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Oui mais la j'ai rajouté des E. et S. devant les champs.

Sinon essaye sans le group by

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

exemple:

alexis retour prof: eric
alexis retour prof: jeremy
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   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
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
dna.factory Messages postés 26089 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
dna.factory Messages postés 26089 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
+1
0
alexis972 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   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