Problemes doublons jointures avec WHERE

Résolu/Fermé
alexis972 Messages postés 6 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013 - 6 juin 2013 à 16:00
alexis972 Messages postés 6 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013 - 11 juin 2013 à 13:18
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 mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013
6 juin 2013 à 16:18
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
6 juin 2013 à 16:20
La table scloar représente les prof ?
0
alexis972 Messages postés 6 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013
6 juin 2013 à 16:25
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
6 juin 2013 à 16:36
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
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
Modifié par jeremy.s le 6/06/2013 à 16:57
Oui mais la j'ai rajouté des E. et S. devant les champs.

Sinon essaye sans le group by

Jérémy
0
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
6 juin 2013 à 17:08
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 mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013
7 juin 2013 à 08:33
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 25005 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 20 mai 2024 1 609
Modifié par dna.factory le 7/06/2013 à 09:12
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 mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013
7 juin 2013 à 09:34
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 25005 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 20 mai 2024 1 609
7 juin 2013 à 09:46
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
7 juin 2013 à 14:39
+1
0
alexis972 Messages postés 6 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 11 juin 2013
11 juin 2013 à 13:18
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
6 juin 2013 à 16:07
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