Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro Kamel Ghanem
    Enseignant
    Inscrit en
    août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Nom : Homme Kamel Ghanem
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 60
    Points : 12
    Points
    12

    Par défaut Liste élèves non notés dans une matière donnée

    Salut

    J'ai un petit soucis concernant une requete SQL

    Voilà j'ai les tables suivantes :

    Classes ( idcla , libcla , ....)

    Eleves ( idelv , nomelv , prenelv , .... , #idcla , ....)

    Matieres ( idmat , libmat , ....)

    Trimestres ( idtrim , libtrim , datedeb , datefin)

    Notes ( #idelv , #idmat , #idtrim , note1 , note2 , ...)


    Supposant qu'un prof qui enseigne une matière donnée n'a pas encore saisi les notes de ses élèves dans cette matière et on veut qu'en choisissant sa classe , une liste de ses élèves s'affiche ainsi que les colonnes : note1 , note2 , ...c'est-à-dire en tout ça :

    Nom Prénom note1 note2

    Bernard Yoan NULL NULL

    Dumoulin Seb NULL NULL

    ...... ..... NULL NULL


    Bref , chaque prof a ses propres classes et il doit saisir leurs notes dans la matière qu'il enseigne donc si on suppose que la table Matières est totalement saisie et qu'elle contient toutes les matières enseignées mais que la table Notes n'en contient pas 3 ou 4 ( par exemple les profs de physique et de maths ont oublié de saisir les notes de leurs élèves dans ces matières ).

    Ma question : Comment , à travers une requete SQL , afficher la liste des élèves d'une classe donnée dont leurs notes n'ont pas encore été saisies et ce pour une matière donnée et un trimestre donné , c'est-à-dire afficher les élèves ( nom , prénom , ...) et les colonnes représentant leurs notes respectives mais dont le contenu est : NULL afin de permettre au prof de saisir les notes.

    J'ai essayé cette requete SQL mais ça ne me donne pas ce que je voulais :

    Code :
    1
    2
    3
    SELECT e.idelv,e.nom,e.pren,c.libcla,m.libmat,t.libtrim,n.note1,n.note2,n.note3 FROM classes c INNER JOIN 
    eleves e ON c.idcla=e.idcla LEFT JOIN notes n ON e.idelv=n.idelv 
    WHERE e.idcla =4 AND n.idmat=3 AND n.idtrim=1
    Voilà , j'utilise la base de données SQL SERVER 2008 , Merci pour tout.

  2. #2
    Expert Confirmé Sénior Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    juillet 2007
    Messages
    3 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : juillet 2007
    Messages : 3 012
    Points : 4 371
    Points
    4 371

    Par défaut

    Bonjour Devman2011,

    Tu pars, d'entrée, sur de mauvaises bases... que tu as, d'ailleurs, bien repérées en parlant des NULL.

    Suggestion :
    Classe(idcla, libcla , ....) ;
    Eleve(idelv, nomelv, prenelv, .... , #idcla , ....) ;
    Matiere(idmat, libmat , ....) ;
    Trimestre(idtrim, libtrim, datedeb, datefin) ;
    Examen(idexamen, libexamen, #idmat, ...) ;
    Note(#idelv, #idtrim, #idexamen, note, ...).
    vite fait... mais, je pense que tu comprends l'idée : ne pas avoir les notes en colonnes, mais en lignes.

    NB : il me semble qu'il est d'usage de mettre au singulier le nom des tables : a priori, nous nous doutons qu'elles comprendront plusieurs enregistrements...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Candidat au titre de Membre du Club
    Homme Profil pro Kamel Ghanem
    Enseignant
    Inscrit en
    août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Nom : Homme Kamel Ghanem
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 60
    Points : 12
    Points
    12

    Par défaut

    Salut

    Merci de me répondre mais j'ai déjà poster ce problème de conception ou modélisation de mes tables et grace aux réponses sur le forum j'ai pu obtenir le MLD de ma base de données , ce qui me pose problème c'est la requete SQL qui me permettrait d'avoir la liste des élèves d'une classe donnée dont leurs notes contiennent NULL dans une matière donnée et un trimestre donné.


    Le problème de la conception est déjà réglé car en fait j'ai la table Notes :

    Note ( #idelv , #idmat , #idtrim , moyev , dev1 , dev2 , examen_trim )

    La formule pour calculer la moyenne trimestrielle d'un élève est très complexe :

    Moy_Trim = ( ( moyev + dev1 + dev2 ) / 3 ) + examen_trim ) / 5

    Donc vous voyez bien que c'est très dur de calculer cette moyenne trimestrielle à travers les relations que vous m'avez proposées et je vous remercie de m'avoir éclairer sur ce point mais ça ne m'arrange pas au niveau du calcul des moyennes trimestrielles de chaque élève et ce dans chaque trimestre.

    J'ai fait des tests concluants en calculant la moyenne trimestrielle de chaque élève dans chaque trimestre en utilisant la fonction AVG de SQL mais ce que je n'obtient pas c'est la liste des élèves d'une classe donnée dont les notes : moyev , dev1 , dev2 , examen_trim Contiennent des valeurs NULL afin que je puisse les saisir étant donné que les élèves sont déjà saisis dans la table Eleve et que les matières sont déjà saisies dans la table Matiere et la meme chose pour les trimestres dans la table Trimestre.

    Merci pour vos efforts

    M

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 819
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 819
    Points : 24 808
    Points
    24 808

    Par défaut

    Merci de me répondre mais j'ai déjà poster ce problème de conception ou modélisation de mes tables et grace aux réponses sur le forum j'ai pu obtenir le MLD de ma base de données
    Notes ( #idelv , #idmat , #idtrim , note1 , note2 , ...)
    Ça m'étonnerait qu'on t'ai laissé faire un tel schéma sans rechigner !

    Le modèle de Richard_35 est bien meilleur.

    Quant à la requête, adresse toi au forum Langage SQL ou à celui dédié à ton SGBD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué
    Homme Profil pro Daniel BALLAND
    Retraité MO
    Inscrit en
    mai 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Nom : Homme Daniel BALLAND
    Âge : 66
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité MO
    Secteur : Finance

    Informations forums :
    Inscription : mai 2008
    Messages : 74
    Points : 123
    Points
    123

    Par défaut

    Et avec un idNote, auto incrémenté, ça n'éviterait pas les nulls ?
    R.BASILE, 1971 : "Il y a mille et un procédés pour accélérer des particules. Le seul véritablement fondamental restant...le carnet de chèques."

  6. #6
    Expert Confirmé Avatar de pacmann
    Homme Profil pro Pacman Pacman
    Consulté Oracle
    Inscrit en
    juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Nom : Homme Pacman Pacman
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : juin 2004
    Messages : 1 626
    Points : 2 822
    Points
    2 822

    Par défaut

    Salut,

    Citation Envoyé par devman2011 Voir le message
    La formule pour calculer la moyenne trimestrielle d'un élève est très complexe :

    Moy_Trim = ( ( moyev + dev1 + dev2 ) / 3 ) + examen_trim ) / 5

    Donc vous voyez bien que c'est très dur de calculer cette moyenne trimestrielle à travers les relations que vous m'avez proposées et je vous remercie de m'avoir éclairer sur ce point mais ça ne m'arrange pas au niveau du calcul des moyennes trimestrielles de chaque élève et ce dans chaque trimestre.
    Avec un exemple : si un élève à 10/20 sur toutes ces notes... ça fait :
    ((10+10+10)/3)+10)/5
    => Il manque une parenthèse
    => Je suppose qu'il faut en ouvrir une de plus au départ... mais ça fait une moyenne de 4, ce qui est super injuste pour quelqu'un qui a eu 10 tout le trimestre

    Bon, plus sérieusement, tu veux juste pondérer les notes, non ?
    Dans ce cas, ajoute cette pondération dans le modèle, et calcule ta moyenne comme barycentre de ces points pondérés.

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  7. #7
    Expert Confirmé Sénior Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    juillet 2007
    Messages
    3 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : juillet 2007
    Messages : 3 012
    Points : 4 371
    Points
    4 371

    Par défaut

    Bonjour à tous,

    Je pense, mais je peux me tromper, que Devman2011 est ennuyé par les éventuelles valeurs NULL qui font mal réagir sa formule (qui, au demeurant, ne présente aucune complexité... mais, c'est une autre histoire).

    Donc, soit Devman2011 adopte un modèle qui évite ces valeurs NULL, soit il reste sur son modèle et, dans ce cas, il faut tester, une à une les valeurs concernées par la formule (si =NULL, alors =0, ...).

    En tout état de cause, nous voyons, là, les "dégâts" causés par le fameux "bonhomme NULL", quand il est "mal placé".
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  8. #8
    Expert Confirmé
    Avatar de Hephaistos007
    Inscrit en
    décembre 2004
    Messages
    1 807
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 1 807
    Points : 2 571
    Points
    2 571

    Par défaut

    Je n'ai rien compris mais malgré tout voilà ce qui me vient à l'esprit :
    Code sql :
    SELECT * FROM xxx LEFT OUTER JOIN yyy ON www WHERE zzz IS NULL;

    A prendre ou à laisser
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

    Retrouvez mes cours et tutos autour d'Android/Java/Eclipse sur http://olegoaer.developpez.com/

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •