IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calcul moyenne éléve-classe PHP SQL [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut Calcul moyenne éléve-classe PHP SQL
    Bonjour à tous,
    Je suis entrain de développer un outil permettant de suivre la progression d'une classe d'élèves.
    Je voudrais afficher dans un tableau les informations suivantes

    Matière | Moyenne élève | Moyenne classe

    J'ai créé les tables suivantes

    alp_notes
    `id`
    `id_classe`
    `id_mat`
    `trimestre`
    `id_elv`
    `dat_note`
    `designation`
    `coeff`
    `note`

    alp_matieres
    `id_matiere`
    `id_prof`
    `matiere`
    `coef`

    alp_eleves
    `id_eleve`
    `id_classe`
    `nom`

    Pour le PHP :

    data.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     <?php
    		$querynew ="SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneELV 
    						FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 
    						WHERE A.`id_classe` = '1' 
    						AND `trimestre`= 'T1' 
    						AND `id_elv` = '1' 
    						AND `id_mat` = `id_matiere` 
    						GROUP BY `id_matiere`
    						UNION
    						SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneCLASSE 
    						FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 
    						WHERE A.`id_classe` = '1' 
    						AND `trimestre`= 'T1'  
    						AND `id_mat` = `id_matiere` 
    						GROUP BY `id_matiere`";
     
    		$records_per_page=20;
    		$newquery2 = $crud->paging($querynew,$records_per_page);
    		$crud->dataview($newquery2);
    	 ?>
    et class.crud.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public function dataview($querynew)
    	{
    		$stmt = $this->db->prepare($querynew);
    		$stmt->execute();
     
    		if($stmt->rowCount()>0)
    		{
    			while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    			{
    				?>
                    <tr>
     
     
                    <td><?php print($row['matiere']); ?></td>				
                    <td><span class="label label-success"><?php print($row['moyenneELV']); ?></span>
                            <span class="label label-default"><?php print($row['moyenneCLASSE']); ?></span></td>							
     
     
     
     
     
                    </tr>
                    <?php
    			}
    		}
    		else
    		{
    			?>
                <tr>
                <td>Aucune donnée...</td>
                </tr>
                <?php
    		}
     
    	}
    Le soucis est qu'il m'affiche bien la moyenne de l'élève et de la classe mais l'un en dessous de l'autre....si vous pouvez m'éclairer car je débute là dedans et tourne en rond.... Merci beaucoup

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Regarde ton fichier css, aux lignes .label ET .label-success ET .label-default



    edit : tu ne veux pas un peu arrondir ta moyenne ? Ca doit faire bizarre quand tu as 10 chiffres après la virgule ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ROUND(SUM(`note_c`) / SUM(`coeff`) , 2) AS moyenneELV
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Merci pour l'arrondi
    A vrai dire je ne m'y étais pas attardé en espérant avant pouvoir résoudre ce soucis mais au moins vous me faites gagner du temps


    J'ai regardé au niveau du CSS

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .label{border:1px solid #000}
     
    .label-success{background-color:#5cb85c}
    .label-success[href]:focus,
    .label-success[href]:hover{background-color:#449d44}
     
    .label-default{background-color:#777}
    .label-default[href]:focus,
    .label-default[href]:hover{background-color:#5e5e5e}

    Mais ne vois pas ce qui pourrais ce pb de moyenne de l'élève et de la classe qui se superposent au lieu d'être côte à côte
    ... Merciii

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu sais quoi... On va d'abord vérifier que c'est bien un problème de CSS...

    Teste ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <td>
       <span><?php print($row['moyenneELV']); ?></span>
       <span><?php print($row['moyenneCLASSE']); ?></span>
    </td>
    edit : et à la réflexion, tu peux nous montrer tout ton fichier css ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    J'ai testé mais le résultat est le même...donc pas au niveau CSS alors ?
    Je soupçonne un pb au niveau de la requête car les select pris à part ras mais peut être que le fait de les mettre bout à bout donne un affichage à la suite...peut être les joindre par l'id_matiere mais comment ?

    Nb: J'ai copié le fichier CSS mais comme il regroupe plusieurs éléments de l'appli ADMIN LTE il fait trop de caractéres et mon message doit être validé par un modérateur

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Une requête du type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneELV, AVG(SUM(`note_c`) / SUM(`coeff`)) AS moyenneCLASSE	
    FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 						
    WHERE A.`id_classe` = '1' 						
    AND `trimestre`= 'T1' 						
    AND `id_elv` = '1' 						
    AND `id_mat` = `id_matiere` 						
    GROUP BY `id_matiere`

    (Qui plante pour "Invalid use of group function ")
    où on aurais côté a cote la moyenne de l'élève et la moyenne de la classe par matière.
    Si vous voyez où cela peut clocher mercii

  7. #7
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    J'avais raté ça, mais ton SQL, là, c'est du grand n'importe quoi.

    Commence par caler LA bonne requête DANS TON PHPMYAMDIN qui calcule la moyenne de tous tes élèves : tu ne divises pas par le coeff de ta matière ??? Tu divises par le nombre d'élèves ?
    Teste ceci, qui pour l'instant ne tient pas compte du coeff de la note :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select e.nom, round(avg(n.note), 2) as moyenne_elv 
    from alp_notes n
    inner join alp_eleves e on n.id_elv=e.id_eleve
    inner join alp_matieres m on n.id_mat=m.id_matiere
    where n.id_classe = '1' 
    and n.trimestre= 't1' 
    group by n.id_elv

    Teste ceci jusqu'à ce que ce soit parfait avant de passer à plus compliqué !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Très bien donc requête testée dans phpmyadmin qui ne donne que la moyenne (fausse) pour chaque élève et pour 1 seule matière...
    Pour info j'ai bien précisé que la requête précédente est la "compilation" de 2 requêtes qui donnent chacunes le bon résultat (je sais encore calculer une moyenne lol)

    Partie 1 (moyenne de chaques élèves par matière)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneELV 
    	FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 
    	WHERE A.`id_classe` = '1' 
    	AND `trimestre`= 'T1' 
    	AND `id_elv` = '1' 
    	AND `id_mat` = `id_matiere` 
    	GROUP BY `id_matiere`

    Partie 2 (moyenne des moyennes par matière)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneCLASSE 
    	FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 
    	WHERE A.`id_classe` = '1' 
    	AND `trimestre`= 'T1'  
    	AND `id_mat` = `id_matiere` 
    	GROUP BY `id_matiere`

  9. #9
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Ce n'est pas la moyenne par élève, qui afficherait elle tous les élèves, c'est la moyenne d'un élève filtré...
    C'est ce que tu veux ?
    ET ce que tu appelles coeff dans ta table note, c'est le nombre d'élèves ? Ce n'est pas un coeff ça.
    Sinon, merci de t'inspirer des modifications que je te propose si tu veux t'y retrouver (jointure propre, nom de table = initiale qui fait sens).
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Sur le fond maintenant, le plus simple, c'est de créer une vue matière avec ta seconde requête (une fois nettoyée comme conseillé)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    create or replace view v_matiere as blablabla

    et après en dernier, tu pourras faire une jointure entre ta première requête et la vue.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create or replace view v_matiere as
    select m.id_matiere,m.matiere,n.id_classe,n.trimestre, round(sum(n.note) / sum(n.coeff), 2) as moyenne_classe
    from alp_notes n
    inner join alp_matieres m on n.id_mat=m.id_matiere
    GROUP BY n.id_matiere,n.id_classe,n.trimestre

    edit : ayé, j'ai fini, voici la vue qui te sera utile...

    Et si je ne m'abuse la requête finale, ouf

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select v.matiere, round(sum(n.note) / sum(n.coeff), 2) as moyenne_elv, v.moyenne_classe
    from alp_notes n
    inner join v_matiere v on n.id_mat=v.id_matiere and n.id_classe=v.id_classe and n.trimestre=v.trimestre
    where n.trimestre= 't1' 
    and n.id_elv = 1
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Merci pour ton implication !
    En réalité je n'ai pas posté les bons codes !
    Je m'explique : note_c est la note coefficientée
    Donc pour ma moyenne faire :

    SUM(note_c)/ SUM (coeff)

    revient à faire

    SUM((note)*(coeff))/ SUM (coeff)

    pour avoir la moyenne par matière et
    AVG(SUM((note)*(coeff))/ SUM (coeff))

    Pour la moyenne de la classe par matière

    Mais est ce possible mettre ces 2 dans une requête ?

    Nb:
    La note (note)
    Son coefficient (coeff)
    Note coefficientée (note_c), que je vais retirer car c'est simplement note*coefficient

    Désolé pour cette confusion

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Navré Dendrite pour mes confusions !

    Donc une requête de cette forme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `matiere`, SUM(`note_c`) / SUM(`coeff`) AS moyenneELV, AVG(SUM((note)*(coeff))/ SUM (coeff)) AS moyenneCLASSE	
    FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C 						
    WHERE A.`id_classe` = '1' 						
    AND `trimestre`= 'T1' 						
    AND `id_elv` = '1' 						
    AND `id_mat` = `id_matiere` 						
    GROUP BY `id_matiere`

    (Ne passe pas dans phpmyadmin)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    la syntaxe SQL est stricte.
    Elle ne supporte pas l'à-peu-près.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM `alp_notes` A, `alp_eleves` B, `alp_matieres` C
    1- Dendrite t'a montré comment JOINDRE plusieurs tables, avec INNER JOIN (ou LEFT JOIN,...)

    2- tu crées des alias de tables (ici A, B et C), mais tu ne les utilises pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... SUM(`note_c`) / SUM(`coeff`) AS moyenneELV ...
    3- il manque des parenthèses.

    Ecrite "proprement", la requête devient :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 
     MA.matiere, 
     ( SUM(NT.note) / SUM(NT.coeff) ) AS moyenneELV, 
     AVG( SUM(NT.note*NT.coeff) / SUM(NT.coeff) ) AS moyenneCLASSE
     
    FROM alp_notes NT
    INNER JOIN alp_eleves EL
     ON NT.id_elv = EL.id_eleve
    INNER JOIN alp_matieres MA
     ON NT.id_mat = MA.id_matiere
     
    WHERE NT.id_classe = 1
     AND NT.trimestre = 'T1'
     AND NT.id_elv = 1
    GROUP BY MA.id_matiere
    Dernière modification par Invité ; 18/03/2018 à 07h43.

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Merci à vous mais toujours le même retour de phpmyadmin "Invalid use of group function"
    Pourtant je reprends exactement vos propositions

  16. #16
    Invité
    Invité(e)
    Par défaut
    1- Il doit y avoir un souci avec les calculs internes (AVG,...) et le WHERE...


    2- peut-être une solution (à tester) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT 
     MA.matiere, 
     ( SUM(NT.note) / SUM(NT.coeff) ) AS moyenneELV, 
     ( SELECT 
        AVG( SUM(NT2.note*NT2.coeff) / SUM(NT2.coeff) ) 
        FROM alp_notes NT2
        WHERE NT2.id_classe = 1
        AND NT2.trimestre = 'T1' 
     ) AS moyenneCLASSE
     
    FROM alp_notes NT
    INNER JOIN alp_eleves EL
     ON NT.id_elv = EL.id_eleve
    INNER JOIN alp_matieres MA
     ON NT.id_mat = MA.id_matiere
     
    WHERE NT.id_classe = 1
     AND NT.trimestre = 'T1'
     AND NT.id_elv = 1
    GROUP BY MA.id_matiere

    3- À ta place, je ferais une 2ème requête séparée pour la moyenne de classe.
    C'est plus simple.
    Dernière modification par Invité ; 17/03/2018 à 22h29.

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut
    Testé....toujours le même message erreur

    Oui j'avais pensé à scinder en 2 requêtes mais je bloque au niveau de mon tableau en php je n'arrive pas à adapter mon code

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si on se réfère à cette discussion, à tester * :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE NT.id_classe = 1
     AND NT.trimestre = 'T1'
     
    GROUP BY MA.id_matiere
    HAVING NT.id_elv = 1
    Ou un truc de ce genre...

    * TOI seul peut le faire

  19. #19
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    @owenn
    De toute façon, il y a une redondance dans tes filtres.
    Si tu sélectionnes un élève, tu n'as pas à sélectionner sa classe ! C'est compris dans les jointures.
    Pour les filtres, il doit juste y avoir l'id de l'élève et le trimestre...
    Tu comprends, c'est un peu comme si tu disais where eleve_id=4 and nom="DUPONT" and prenom="Henri" //filtre redondant et donc polluantQuestion subsidiaire : pour le trimestre d'ailleurs ? Ca n'est forcément QUE l'année scolaire courante ? On ne peut pas regarder les notes des années passées ?

    edit : je reviens sur la structure de tes tables, que je suis allée vérifier.
    La redondance dans tes filtres est due à la redondance dans ta structure, qu'il te faut donc changer.
    Tu ne peux pas mettre dans ta table notes classe_id, eleve_id, et dans ta table eleve classe_id, eleve_id

    La bonne pratique (et elle est essentielle en matière de base de données relationnelle), c'est de ne mettre classe_id QUE dans ta table eleve, et de ne mettre que eleve_id (ta clé étrangère) dans ta table notes.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  20. #20
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bon, voilà un truc qui est sûr de marcher, si tu n'as pas modifié tes tables depuis le début (je me suis servie de ta description de tables du premier message).

    Tu enlèves toute redondance dans tes tables et tu les revois ainsi :

    alp_notes
    `id`
    `id_mat`
    `trimestre`
    `id_elv`
    `dat_note`
    `designation`
    `note`

    alp_matieres
    `id_matiere`
    `id_prof`
    `matiere`
    `coef`

    alp_eleves
    `id_eleve`
    `id_classe`
    `nom

    Puis tu balances ce code dans ta fenêtre SQL :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create or replace view v_notes as 
    select distinct n.id as note_id,m.id_matiere as mat_id,n.trimestre as note_trimestre,e.id_eleve as eleve_id,e.id_classe as eleve_classe,e.nom as eleve_nom,n.dat_note as note_date,n.designation as note_designation,(n.note * mat.coef) as note_coeff,m.id_prof as mat_prof,m.matiere as mat_libelle,mat.coef as mat_coeff
    from alp_notes n
    left join alp_matieres m on n.id_mat=m.id_matiere
    left join alp_eleves e on n.id_elv=e.id_eleve

    et ensuite tu admires ta vue avec un petit
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from v_notes

    Il faut que tu comprennes que la redondance n'a lieu d'être que dans la vue dynamique, pas dans tes tables statiques. C'est essentiel.
    Seulement ensuite, à partir de cette vue nickel et aisément lisible par un humain, tu pourras faire tes requêtes de moyenne.

    Explications sur les jointures :
    Si tu laisses left join, tu verras apparaître des matières genre "Italien" qui n'ont encore bénéficié d'aucun contrôle dans l'année, et de même, tu verras apparaître les élèves qui n'ont encore bénéficié d'aucun contrôle. Pour mémoire, pour ne pas qu'ils disparaissent totalement de ta vue.

    Si ça ne t'intéresse pas, tu fais inner join... mais il me semble que ce serait bien qu'un élève ou une matière ne disparaisse pas de ta vue, c'est le cas de le dire.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/04/2015, 14h06
  2. Requête sql server pour calculer moyenne entre deux dates
    Par JérômeKGS dans le forum Développement
    Réponses: 2
    Dernier message: 17/04/2015, 12h04
  3. [WD14] calcul de la moyenne de classe
    Par hassdevelop dans le forum WinDev
    Réponses: 12
    Dernier message: 10/04/2012, 17h22
  4. Réponses: 35
    Dernier message: 10/05/2006, 01h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo