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. #21
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour toutes ces précisions.... il est vrai que dans cet état, l'outil sera pour une seule année scolaire, mais j'ajouterais une table année scolaire avec un id_annee. Pour l'instant je vais laisser comme ça.

    j'ai lancé le code dans la fenêtre SQL mais il me mets
    #1054 - Unknown column 'mat.coef' in 'field list'

  2. #22
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Et tu n'as pas pu rectifier tout seul ?

    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,m.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
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #23
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé de changer des choses mais...rien
    j'ai testé ta requête mais toujours la même erreur
    Donc j'ai changé (n.note * mat.coef) as note_coeff en (n.note * m.coef) as note_coeff mais résultat vide, pas d'erreur par contre et select * from v_notes ne retourne pas la colonne avec la moyenne

  4. #24
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Que retourne
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from v_notes

    il est vrai que dans cet état, l'outil sera pour une seule année scolaire, mais j'ajouterais une table année scolaire avec un id_annee. Pour l'instant je vais laisser comme ça.
    Non, ça ne marchera pas.
    Mais je viens de réaliser que tu as la date de la note, donc tout est bon, tu auras l'année scolaire en améliorant ta vue.

    Tu viens de faire une vue (si elle fonctionne). Avec donc des jointures nickel et sans redondance. Dans ton modèle de départ, tu n'allais pas saisir les infos deux fois dans 2 ou 3 tables différentes ???

    C'est après, dans tes requêtes que tu feras des calculs de moyenne ou ce que tu veux, à partir de CETTE vue.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #25
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Voilà, relance cette requête dans une fenêtre sql qui améliorera ta vue, en calculant dynamiquement l'année scolaire de la note en fonction de la date (et en imaginant que la bascule d'une année scolaire est au 1er septembre).

    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
    21
    22
    23
    create or replace view v_notes as 
    select distinct n.id as note_id,
    m.id_matiere as mat_id,
    case
    	when n.dat_note is null or trim(n.dat_note ="") then NULL
    	when month(n.dat_note) < 9 then year(n.dat_note)-1
    	when month(n.dat_note) >=9 then year(n.dat_note)
    	else 0 /*ici 0 sera une anomalie signifiant que tu dois corriger ta date*/
    end as an_scol,
    n.trimestre as note_trimestre,
    n.dat_note as note_date,
    e.id_eleve as eleve_id,
    e.id_classe as eleve_classe,
    e.nom as eleve_nom,
    n.designation as note_designation,
    n.note as note_valeur,
    (n.note * m.coef) as note_coeff,
    m.id_prof as mat_prof,
    m.matiere as mat_libelle,
    m.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
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #26
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    À vrai dire je ne connaissais pas cette notion de "vue" en sql...je vais me pencher la dessus.
    Merci infiniment pour votre implication donc quand je lance select * from v_notes j'ai toutes les colonnes désirée et l'année scolaire....c'est merveilleux !
    Maintenant comment procéder pour le calcul de la moyenne élève et classe côte à côte....mercii

  7. #27
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Comme te disait Jreaux, elles ne seront pas forcément cote à cote dans le SQL... Tu les mettras cote à cote dans le PHP.
    Procédons par étape :

    Ta requête pour les matières, c'est ce genre de choses (maintenant, tu ne fais les moyennes qu'à partir de ta vue).
    J'imagine que tu veux un truc du genre
    2017 / trim1 / anglais / TermS / 2 / 12.5
    2017 / trim1 /anglais / TermL / 4 / 13

    etc. etc.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select an_scol, note_trimestre, mat_libelle, eleve_classe, mat_coeff, avg(note_valeur) as moyenne
    from v_notes
    WHERE an_scol=2017
    AND note_trimestre = "T1"
    GROUP BY mat_id, eleve_classe
    order by mat_libelle, eleve_classe

    Je te laisse caler ça... et chercher un peu la moyenne par élèves (via la vue toujours).

    edit : il est 20h42, j'arrete d'éditer pour corriger lol... Tu peux tester.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #28
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup...nikel mais pour la moyenne de classe comment faire ? J'ai tenté ceci

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select an_scol, note_trimestre, mat_libelle, eleve_classe,eleve_nom, mat_coeff, avg(note_valeur) as moyenne,avg(moyenne)
    from v_notes
    WHERE an_scol=2017
    AND note_trimestre = "T1"
    GROUP BY mat_id, eleve_classe
    order by mat_libelle, eleve_classe

    Mais forcément il ne connait pas la colonne moyenne...j'avoue être complètement largué et pourtant faire des efforts.
    En plus de cela, si au final on obtient la moyenne de l'éléve et la moyenne de la classe, résultat que j'obtenait au début de ce topic, j'ai le sentiment que lorsque je vais déclarer mes variables en PHP je vais retomber avec ce même problème de moyenne de classe par matiére qui s'affiche sous les moyennes éléves par matiéres....
    Vous aviez même supposé un pb au niveau du CSS, qui renverrais à la ligne mais au final non.
    Certes j'ai bricolé comme un mes requêtes de début mais le pb est dans l'affichage en PHP.

    Jreaux a proposé de scinder en 2 requêtes, ce que j'ai tenté de faire mais je n'arrive pas à adapter mon code.


  9. #29
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Revoici mon code PHP... Lancer 2 requêtes et déclarer les variables ensuite cela serait plus simple mais là dessus pas moyen non plus


    data.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <?php
    		$querynew ="SELECT .............";
     
    		$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
    		}
     
    	}

  10. #30
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon, t'énerve pas. C'est pour demain ton truc ?
    De toute façon, une tâche complexe, c'est une suite de petites tâches, donc pas de panique, si tu es patient, tu y arriveras nickel. Mais faut faire propre et durable.
    Restons sur l'idée de la moyenne élèves, tu veux quoi ?
    ceci convient ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select an_scol, note_trimestre, eleve_classe,eleve_nom,mat_libelle, avg(note_coeff) as eleve_moyenne
    from v_notes
    WHERE an_scol=2017
    AND note_trimestre = "T1"
    GROUP BY eleve_classe, eleve_id
    having eleve_id=1
    order by mat_libelle
    Ca devrait retourner un truc du genre

    2017, trim1, TermL, Dupont, anglais, 25 (si tu veux la note coefficientée) sinon fais avg(note_valeur) as eleve_moyenne
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #31
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Pour ton PHP, c'est normal que tu n'aies pas de constructeur ? mot de clé new :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $records_per_page=20;
    $crud=new Crud();
    $newquery2 = $crud->paging($querynew,$records_per_page);
    $crud->dataview($newquery2);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #32
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    J'ai besoin pour le résultat final (vue utilisateur) afficher la matière, la moyenne de l'élève et la moyenne de la classe côte à côte.
    Donc soit une requête qui renvoie la moyenne élève et générale et afficher en PHP ou alors 2 requêtes mais je bloque sur l'affichage en PHP.
    Donc j'ai ajouté la ligne
    $crud=new Crud();
    Mais ça ne donne rien.

    La solution de 2 requêtes oui mais comment en php.

    Ps : je suis zen, OUI ZEN !

  13. #33
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu me dis si la requête moyenne élèves que je te propose donne un résultat juste ?
    On ne peut pas sauter les étapes, on ne peut pas. La base de données, c'est le socle de tout le reste.
    C'est pour quand ton truc ? Tu ne réponds pas aux questions. Et à l'écrit, on n'est pas censé se répéter, par contre, le lecteur est censé relire.

    Je te montre un peu un dialogue par analogie :
    toi : j'aimerais bien rouler avec ma voiture de courses sur un chemin de champ
    moi : heu, ouais, le chemin de champ n'est pas du tout adapté. On va d'abord construire l'autoroute. c'est pas très long.
    toi : Nan, je veux rouler sur le chemin de champ.
    moi : Bon alors au moins as tu un tracteur ?
    toi : nan, je veux rouler avec ma mazzerati sur le chemin de champ
    etc etc (et en fait, c'est là qu'on perd du temps).
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

    1- ce serait quand même BEAUCOUP plus RAPIDE et simple si tu nous donnais des extraits (exploitables) de tes TABLES (structure + données) !
    Au moins, on pourrait TESTER de notre coté, au lieu d'attendre tes retours...

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    <td><span class="label label-success"><?php print($row['moyenneELV']); ?></span>
                            <span class="label label-default"><?php print($row['moyenneCLASSE']); ?></span></td>
    Pourquoi ne les mets-tu pas pas tout simplement pas DEUX cellules séparées ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    <td><span class="label label-success"><?php print($row['moyenneELV']); ?></span></td>
                    <td><span class="label label-default"><?php print($row['moyenneCLASSE']); ?></span></td>
    Là, elles ne risquent pas de passer l'une sous l'autre !...

  15. #35
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Pour quand : le plus rapidement possible donc ce soir, demain, après demain...
    Je sais pertinemment si il y a des étapes à suivre mais concrètement j'ai la base de donnée, j'ai les 2 requêtes donnant pour l'une la moyenne de l'élève et pour l'autre la moyenne de la classe et l'objectif (désolé si je le répète plusieurs fois mais c'est justement parce qu'on me le demande plusieurs fois donc simple politesse de ma part) est d'afficher à la manière d'un bulletin scolaire, sur une même ligne la matière + la moyenne de l'élève + la moyenne de la classe....c'est tout.

    Donc encore une fois j'ai juste besoin de :

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

    Chose que j'arrive à obtenir via phpMyadmin mais les moyennes des élèves et à la suite les moyennes de classe.
    Oui, il suffit de déclarer les variables séparément en PHP mais avec mon code le résultat est le même que via SQL et je n'arrive pas à l'adapter.....voilà

  16. #36
    Invité
    Invité(e)
    Par défaut
    Comment veux-tu qu'on corrige ton code, puisque tu NE LE MONTRES PAS !
    On a bien compris le bla bla.

    Et toi, as-tu compris qu'on n'a PAS accès à ton ordi., ni au contenu de ta tête ??
    Comment veux-tu qu'on DEVINE ce qui s'AFFICHE sur TON écran, ou les données récupérées, ou le code HTML généré, .................. ??



    Il faut APPRENDRE à montrer ce qui est nécessaire :
    • un extrait de l'array, résultant de la requête (dans le while($row=$stmt->fetch(PDO::FETCH_ASSOC)){ ajouter var_dump($row); )
    • le code HTML généré * (clic droit "afficher la source")
    • une copie d'écran
    • ...

    par exemple !


    * dans ta public function dataview($querynew), on voit les <tr>, mais où est la balise <table> ??
    Bref : la structure HTML est-elle correcte ?

  17. #37
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Merci à tous pour votre participation et votre patience

  18. #38
    Invité
    Invité(e)
    Par défaut
    Donc, tu as mobilisé 2 personnes sur ton problème pendant tout un week-end, et tu nous plantes comme ça.

    Bravo.

    Aldo la Classe....

    Dernière modification par Invité ; 19/03/2018 à 17h47.

  19. #39
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Donc, tu as mobilisé 2 personnes sur ton problème pendant tout un week-end, et tu nous plantes comme ça.

    Bravo.

    Aldo la Class....
    Bah oui, il est parti avec sa Mazzerati sur son chemin de champ.
    C'est comme ça la jeunesse...
    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 2 sur 2 PremièrePremière 12

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