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

Langage PHP Discussion :

[Tableaux] Calcul d'une moyenne à partir d'un tableau


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [Tableaux] Calcul d'une moyenne à partir d'un tableau
    Bonjour,
    j'ai créé une base de donnée contenant 2 tableau concernant des étudiant,
    le premier contient:
    identifiant, prénom, nom, date de naissance, promotion
    le deuxieme:
    identifiant, identifiant des matieres, notes examens, notes TP.

    J'envoi cette requete à la base de donnée:
    $Requete="SELECT nom,prenom,noteE,noteTP FROM etudiant NATURAL JOIN note WHERE promo='$PROMOTION' ORDER BY nom, prenom";
    puis a l'aide de mysql_fetch_array je demande le resultat sous forme de tableau.

    Je voudrais maintenant, pour un meme nom et prenom, calculer la moyenne d'un etudiant d'une promotion precise.

    J'arrive parfaitement a afficher les eleves d'une promotion mais je ne vois pas comment faire "l'algorithme" qui permet de parcourir les notes de chaque lignes et les additionner entre elle.

    J'ai essayé plusieurs algorithme mais la plupart du temps ils ne me calculait la moyenne que de la premiere ligne de chaque nom de la base de donnee.

    Voici le dernier algorithme que j'ai créé:

    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
    while($Donnee=mysql_fetch_array($Reponse))
    {
        if ($Donnee[0].$Donnee[1]==$temp)
        {
              if ($Donnee[2].$Donnee[3]==$temp2)
              {
    	 $somme1=$somme1+$Donnee[2];
    	 $somme2=$somme2+$Donnee[3];
    	 $n++;
                }
               else
               {	
    	 $temp2=$Donnee[2].$Donnee[3];
                }
    	$moyenne=(3*($somme1/$n)+($somme2/$n))/4;
    	 echo $nom, " ", $prenom, " ",$moyenne, "<br />";
         }
         else
         {
            $temp=$Donnee[0].$Donnee[1];
         }
    }
    Mais un message d'erreur me dit que je tente de diviser par zéro.

    Je suis un peu perdu et j'espère que vous ne le serez pas et que je me suis convenablement expliqué.

    Merci de votre aide !!

  2. #2
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    N'ayant pas tout compris, je te propose cette syntaxe :
    Code php : 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
    while($Donnee = mysql_fetch_array($Reponse))
    {
    	$nom = $Donnee[0];
    	$prenom = $Donnee[1];
     
    	if ($nom.$prenom == $temp)
    	{	
    		if ($Donnee[2].$Donnee[3] != $temp2)
    		{
    			$moyenne=(3*($somme1/$n)+($somme2/$n))/4;
    			$temp2 = $Donnee[2].$Donnee[3];
    			$n = 0;
    			$somme1 = 0;
    			$somme2 = 0;
    		}
     
    		$somme1 = $somme1+$Donnee[2];
    		$somme2 = $somme2+$Donnee[3];
    		$n++;
     
    		echo $nom, " ", $prenom, " ",$moyenne, "<br />";
    	}
    	else
    	{
    		$temp = $nom.$prenom;
    		$moyenne = 0;
    	}
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai testé le code proposé mais cela ne marche pas, je te remerci de me l'avoir proposé.
    Il me renvoi les erreurs suivantes:
    Notice: Undefined variable: somme1 in c:\program files\easyphp1-8\www\selection_promo.php on line 65

    Notice: Undefined variable: n in c:\program files\easyphp1-8\www\selection_promo.php on line 65

    Warning: Division by zero in c:\program files\easyphp1-8\www\selection_promo.php on line 65

    Notice: Undefined variable: somme2 in c:\program files\easyphp1-8\www\selection_promo.php on line 65

    Notice: Undefined variable: n in c:\program files\easyphp1-8\www\selection_promo.php on line 65

    Warning: Division by zero in c:\program files\easyphp1-8\www\selection_promo.php on line 65
    nom1 prenom1 0
    nom1 prenom1 11.25
    nom2 prenom2 10
    nom2 prenom2 0
    nom3 prenom3 14.25
    nom3 prenom3 12
    Je pense que cela viens du fait que les variables ne sont pas définies avant la premiere entrée dans la boucle if.

    De plus je vais tenter de m'expliquer un peu mieux sur ce que je désire:

    J'envois ce code à la base de donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    $Requete="SELECT nom,prenom,noteE,noteTP FROM etudiant NATURAL JOIN note WHERE promo='$PROMOTION' ORDER BY nom, prenom";
                    $Reponse=mysql_query($Requete);
     
                    $Donnee=mysql_fetch_array($Reponse);
    Celui ci me permet d'obtenir dans la variable $Donnee, le nom, prénom, la note d'examen ainsi que la note de TP des élèves. Tout cela classé par Nom et prénom. (Dans ma base de donnée pour le moment je possède 3 lignes pour chaque élève dans ce tableau, donc ceci:
    Nom1 // Prenom1 // noteE1 // NoteTP1
    Nom1 // Prenom1 // noteE2 // NoteTP2
    Nom1 // Prenom1 // noteE3 // NoteTP3

    Nom2 // Prenom2 // noteE1 // NoteTP1
    Nom2 // Prenom2 // noteE2 // NoteTP2
    Nom2 // Prenom2 // noteE3 // NoteTP3

    Nom3 // Prenom3 // noteE1 // NoteTP1
    Nom3 // Prenom3 // noteE2 // NoteTP2
    Nom3 // Prenom3 // noteE3 // NoteTP3)

    Je veux donc, par ce calcul: [(moyenneNoteE*3)+(moyenneNoteTP)]/(4*nbredematières)

    Calculer et afficher la moyennede chaque élève.
    Ce qui me pose problème est donc l'algorithme de lecture du tableau qui me permettrait de calculer en premier lieu la somme des noteE et note TP pour chaque élève.

    Pour vous aider ou pas je vous met le code que j'ai pour le moment:
    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
     
           $Requete="SELECT nom,prenom,noteE,noteTP FROM etudiant NATURAL JOIN note WHERE promo='$PROMOTION' ORDER BY nom, prenom";
           $Reponse=mysql_query($Requete);
     
           $Donnee=mysql_fetch_array($Reponse);
           $temp=$Donnee[0].$Donnee[1];
           $temp2=$Donnee[2].$Donnee[3];
     
    	while($Donnee = mysql_fetch_array($Reponse))
                {
                   $nom = $Donnee[0];
                   $prenom = $Donnee[1];
     
                      if ($nom.$prenom == $temp)
                      {	
                         if ($Donnee[2].$Donnee[3] != $temp2)
                         {
                               $moyenne=(3*($somme1)+($somme2))/(4*n);
                               $temp2 = $Donnee[2].$Donnee[3];
                               $n = 0;
                               $somme1 = 0;
                               $somme2 = 0;
                         }
     
                         $somme1 = $somme1+$Donnee[2];
                         $somme2 = $somme2+$Donnee[3];
                         $n++;
     
                         echo $nom, " ", $prenom, " ",$moyenne, "<br />";
                      }
                     else
                     {
                         $temp = $nom.$prenom;
                         $moyenne = 0;
                    }
                 }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Je connais pas natural join et tout ton code me parait ahurissant!
    Peut etre une solution avec mon regard de novice:

    On a donc l id de la personne qu'on étudie
    sa promotion en sa on en a pas besoin (on a son id)

    Sur la deuxième table tu fais un select de totue les notes avec cet id
    ensuite tu fais la moyenne sur ces notes et c'est bon.

    Ensuite si tu veux boucler ca sur tout les étudiants, tu rajoute autour une boucle sur tout les id existant.

    Dis moi si cette idée est adaptée et te plait?

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour

    Autant l'avouer tout de suite : je n'ai rien compris à ton algoritme de calcul En revanche, je crois avoir compris ce que tu veux faire.
    Donc, ce que je propose, c'est mon propre algoritme dont le point principal est : laissons mysql faire les sommes, ça nous fera gagner du temps

    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
    // la requete retourne les sommes des notes et le nombre de matieres pour chaque etudiant
    $rq="SELECT nom, prenom, SUM(noteE) AS sommeE, SUM(noteTP) AS sommeTP, COUNT(id_matiere) AS nb_matiere
    	FROM etudiant NATURAL JOIN note
    	WHERE promo='$promotion'
    	GROUP BY id
    	ORDER BY nom,prenom";
     
    $result=mysql_query($rq) or die(mysql_error());
     
    // pour chaque resultat, c'est a dire chaque etudiant
    while($donnee=mysql_fetch_array($result)){
      // on recupere les nom et prenom
    	$nom=$donnee['nom'];
    	$prenom=$donne['prenom'];
      // on calcule la moyenne
    	$moyenne= (3*$donnee['sommeE'] + $donnee['sommeTP']) / (4*$donnee['nb_matiere']);
      // et on affiche le tout
    	echo $nom, " ", $prenom, " ",$moyenne, "<br />";
    }
    En espérant que je ne me sois pas plantée dans la syntaxe
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour toutes vos réponses !
    Mais je connais déja la requête qui permet de laisser mysql faire le calcul et ca prend 4 ligne. Le problème c'est que mon prof veut que nous fassions tous les calculs avec php et non directement par le serveur de BDD...

    Mais bon il nous donnera bien la solution un jour

    Merci de votre aide a tous !

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    je ne dirai pas que ton prof vous complique la vie, mais presque
    Si tout doit être calculé en php, tu peux essayer comme ça. Mais ça implique de connaitre le nombre de matières, et que ce soit le même pour tous les étudiants.
    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
    // on reprend la requete 'origine
    $rq="SELECT nom, prenom, noteE, noteTP
    	FROM etudiant NATURAL JOIN note
    	WHERE promo='$promotion'
    	GROUP BY id
    	ORDER BY nom,prenom";
     
    $result=mysql_query($rq) or die(mysql_error());
     
    $sommeE=0;
    $sommeTP=0;
    $k=0
    $nb_matiere=3; //pour l'exemple
     
    // pour chaque resultat
    while($donnee=mysql_fetch_array($result)){
      // on fait le calcul des sommes à la main
    	$sommeE = $donnee['noteE'] + $sommeE;
    	$sommeTP = $donnee['noteTP'] + $sommeTP;
    	$k++;
     
      // si on a fait le tour des notes de l'etudiant
    	if (k == nb_matiere){
    	  // on recupere les nom et prenom
    		$nom=$donnee['nom'];
    		$prenom=$donne['prenom'];
    	  // on calcule la moyenne
    		$moyenne= (3*$sommeE + $sommeTP) / (4*$nb_matiere);
    	  // et on affiche le tout
    		echo $nom, " ", $prenom, " ",$moyenne, "<br />";
    	  // et on reinitialise
    		$k=0;
    		$sommeE=0;
    		$sommeTP=0;
    	}
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ca marche nikel !! Merci pour tout !!
    Maintenant les petites améliorations :
    Pour savoir le nombre de matiere ne peut on pas faire un count par exemple en groupant par identifiant de matiere et en regardant combien de ligne il y'a ??

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Salut

    C'est possible, mais je te conseille de faire une requête à part pour cela.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS nb_matiere
    FROM note
    GROUP BY id_matiere
    ou éventuellement si tous les étudiants n'ont pas le même nombre de matières :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, COUNT(id_matiere) AS nb_matiere
    FROM note
    GROUP BY id
    A récupérer dand un tableau. Il faut ensuite tester quel est l'étudiant affichée pour utiliser le bon nombre (mais là, je complique légèrement )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai un petit problème avec ton code c'est que je ne vois pas ou je dois le placer pour que ca fonctionne... d'ailleur est ce que lorsque tu fais "AS nb_matiere" ca te cree la variable nb_matiere avec pour valeur le resultat du count ??

    Je poste le script que fonctionnel que j'ai pour le moment :

    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
     // Selection de tous les étudiants de la promo saisie
     
                $requete="SELECT nom, prenom, noteE, noteTP FROM etudiant NATURAL JOIN note WHERE promo='$PROMOTION'ORDER BY nom,prenom";
     
                $result=mysql_query($requete) or die(mysql_error());
     
                $sommeE=0;
                $sommeTP=0;
                $k=0;
     
                $nb_matiere=3; //pour l'exemple
     
                // pour chaque resultat
                while($Donnee=mysql_fetch_array($result))
                {
                  // on fait le calcul des sommes
                    $sommeE = $Donnee['noteE'] + $sommeE;
                    $sommeTP = $Donnee['noteTP'] + $sommeTP;
                    $k++;
     
                  // si on a fait le tour des notes de l'etudiant
                    if ($k == $nb_matiere)
                    {
                      // on recupere les nom et prenom
                        $nom=strtoupper($Donnee['nom']);
                        $prenom=ucfirst($Donnee['prenom']);
                      // on calcule la moyenne
                        $moyenne= (3*$sommeE + $sommeTP) / (4*$nb_matiere);
                      // et on affiche le tout
                        echo $nom, " ", $prenom, " ",$moyenne, "<br />";
                      // et on reinitialise
                        $k=0;
                        $sommeE=0;
                        $sommeTP=0;
                    }
                }

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Salut

    L'utilisation de AS permet effectivement de récupérer une variable avec le nom donné. En clair, COUNT(*) AS nb_matiere renvoie le total du count sous le nom nb_matiere, comme si c'était le nom d'un champ

    En ce qui concerne le code que j'ai donné, d'abord une excuse : la première requête renvoie le nombre d'étudiant par matière et non l'inverse désolée
    Pour avoir le nombre de matieres par étudiant ce serait plutôt ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, COUNT(id_matiere) AS nb_matiere
    FROM note
    GROUP BY id
    L'inconvénient, c'est que cette requête va te renvoyer la liste des étudiants avec le nombre de matières que chacun étudie. Ce qui n'est peut-être pas le but...
    Comme tu travailles sur une promo donnée, il ya deux cas de figures : soit tous les étudiants de la promo ont le même nombre de matières, soit chaque étudiant peut avoir des matières différentes.
    Tout dépend du cas dans lequel tu te trouves ....
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Et bien merci de ces precisions et efectivement dans mon cas tous les élèves d'une même promo possède le même nombre de matières !!


  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Super ! ça va simplifier le problème.
    Ce que tu peux faire dans ce cas :
    On récupère le nombre de matière pour un des élèves de la promotion concernée
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id, COUNT(id_matiere) AS nb_matiere
    FROM note NATURAL JOIN etudiant
    WHERE promo='$promotion'
    GROUP BY id
    LIMIT 0,1
    On récupère tout ça avnt le reste ce qui donne quelque chose comme ça :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    // Nombre de matieres
    $rq="SELECT id, COUNT(id_matiere) AS nb_matiere
    	FROM note NATURAL JOIN etudiant
    	WHERE promo='$promotion'
    	GROUP BY id
    	LIMIT 0,1";
    $res=mysql_query($rq) or die(mysql_error());
    $data=mysql_fetch_assoc($res);
    $nb_matiere=$data['nb_matiere'];
    echo "nb matiere : $nb_matiere <br/>"; // pour vérifier 
     
     // Selection de tous les étudiants de la promo saisie
     
                $requete="SELECT nom, prenom, noteE, noteTP FROM etudiant NATURAL JOIN note WHERE promo='$PROMOTION' ORDER BY nom,prenom";
     
                $result=mysql_query($requete) or die(mysql_error());
     
                $sommeE=0;
                $sommeTP=0;
                $k=0;
     
                // pour chaque resultat
                while($Donnee=mysql_fetch_array($result))
                {
                  // on fait le calcul des sommes
                    $sommeE = $Donnee['noteE'] + $sommeE;
                    $sommeTP = $Donnee['noteTP'] + $sommeTP;
                    $k++;
     
                  // si on a fait le tour des notes de l'etudiant
                    if ($k == $nb_matiere)
                    {
                      // on recupere les nom et prenom
                        $nom=strtoupper($Donnee['nom']);
                        $prenom=ucfirst($Donnee['prenom']);
                      // on calcule la moyenne
                        $moyenne= (3*$sommeE + $sommeTP) / (4*$nb_matiere);
                      // et on affiche le tout
                        echo $nom, " ", $prenom, " ",$moyenne, "<br />";
                      // et on reinitialise
                        $k=0;
                        $sommeE=0;
                        $sommeTP=0;
                    }
                }
    En espérant que ça marche
    attention ce n'est pas forcément la solution optimale Il y a sans doute plus simple, mais je suis malheureusement atteinte du virus "pourquoi faire simple quand on peut faire compliqué"

    EDIT : faute corrigée
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Hé bé hé bé ca avance gentiment . Je vous remerci tous de votre aide et je classe ce post comme résolu !!!



    (ps: petite correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data=mysql_fetch_assoc($res)
    mysql_fetch_assos je connais pas )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WebI Xi3] Calcul d'une moyenne à partir d'une information de type nombre
    Par debdev dans le forum Débuter
    Réponses: 0
    Dernier message: 13/08/2014, 10h02
  2. Calculer une moyenne à partir de plusieurs facteurs
    Par clairemoro87 dans le forum R
    Réponses: 3
    Dernier message: 27/04/2014, 14h42
  3. Réponses: 8
    Dernier message: 20/03/2012, 15h43
  4. requete sql : calcul d'une moyenne
    Par timide94 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/01/2007, 19h12
  5. Réponses: 14
    Dernier message: 09/01/2007, 16h19

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