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 -
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.
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:
- Problemes doublons jointures avec WHERE
- Doublons photos - Guide
- Where is it - Télécharger - Gestion de fichiers
- Supprimer les doublons excel - Guide
- Comment supprimer les doublons photos sur pc gratuitement - Télécharger - Nettoyage
- Where to download bulluduck42793 ✓ - Forum PHP
13 réponses
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
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
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
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
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 ';
$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 ';
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
alors que j'aimerais que la requête m'affiche tous les profs d'un eleve
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 ';
$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 ';
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.
C'est justement là le problème, je ne vois pas comment faire pour obtenir ce que je veux.
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 !
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 !
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
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
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
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
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
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