Autour de Laravel

Calcul de la moyenne générale d'un eleve

Avatar de elhadjdioumabarry
elhadjdioumabarry

salut la famille je veux calculer la moyenne generale des eleve avec le coefficient mais j'arive qu'a calculer la moyenne par matiere j'ai une table eleve,note,matiere quand je fais un group by eleve_id c'est pas tous les coefficient qui sont pris en charge mais quand ajouter matiere_id au niveau du group by il me calcul la moyenne par matiere pour chaque eleve et moi je veux calculer la somme des moyenne par matiere et faire un tri

$note = DB::table('note') ->join('matiere','note.matiere_id','=','matiere.id') ->select(DB::raw(" (sum(note1)+sum(note2)+sum(note3)) as total")) ->groupBy('eleve_id','matiere_id') ->get(); maintenant je veut calculer le total de toutes les matieres aidez moi svp

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Tu veux absolument le faire dans ta requete ? Tu pourais le faire a posteriori en PHP.

Je pense que c'est plus facile de faire en PHP surtout avec les coeficients. Tu ne select pas tes coeficients d'ailleurs, ce serait utile de le faire. Ils sont dans la table matiere je suppose...

Avatar de elhadjdioumabarry
elhadjdioumabarry

Wi les coefficient son dans la table matières mais j'arive pas a calculer donnez moi un astuce svp avec php

Avatar de elhadjdioumabarry
elhadjdioumabarry

quand je selectionne toute les notes et je l'ai groupe par eleve j'arive pas à faire le classement autrement di le order by je sais pas comment l'utiliser en ce moment pour afficher la personne qui à la plus haute moyenne dans la vue

Avatar de CinquièmeDimension
CinquièmeDimension

Tu pourrais déjà ajouter un "*" à ta requête pour récupérer tous les champs.

Ensuite peut-être un $note->groupBy('eleve_id');.

De là, tu récupère une collection groupée par eleve_id et tu pourra boucler dans chacun pour aditionner toutes les moyennes multipliées par leur coefficient et diviser le tout par l'adition de tous les coefficients. Et hop, tu place le résultat dans un champs que tu appele "moyenne_generale" et c'est bon !

Avatar de elhadjdioumabarry
elhadjdioumabarry

Merci beaucoup j'ai fait cela mais maintenant je voudrais ordonner la personne qui à eu la plus grand moyenne reste au début c'est sa qui me reste aidez moi svp

Avatar de elhadjdioumabarry
elhadjdioumabarry

en faite j'ai fait un groupBy et j'ai arriver à calculer la moyenne general mais j'arrive pas à ordonner autrement dit à faire le rang. je veux que la personne qui la moyenne la plus grand se trouve au début aidez moi svp j'arrive pas à le faire

Avatar de elhadjdioumabarry
elhadjdioumabarry

voici mon code pour plus de détaille au niveau du controller $classements = Note::where('niveau_id',12) ->where('trimestre_id',1) ->get() ->groupBy('eleve_id');

au niveau de vue blade

@foreach ($classements as $classement)

                                        @foreach ($classement as $item)
                                            {{ $item->eleve->nom }}
                                                @break;
                                        @endforeach
                                        @php
                                           $somme_total = 0;
                                           $somme_coefficient = 0;
                                        @endphp
                                        @foreach ($classement as $items)
                                            @php
                                                $c = ($items->matiere->matiereNiveaus->first()->coefficient * $items->note1 +
                                               $items->matiere->matiereNiveaus->first()->coefficient * $items->note2 +
                                               $items->matiere->matiereNiveaus->first()->coefficient * $items->note3);
                                             
                                            $somme_total= $somme_total+$c;
                                             $somme_coefficient = $somme_coefficient + $items->matiere->matiereNiveaus->first()->coefficient * 3;
                                            @endphp
                                        @endforeach
                                             {{ $somme_total/$somme_coefficient }}
                                        @endforeach
  maintenant je voudrais ordonner par {{ $somme_total/$somme_coefficient }} desc autrement dit par moyenne

Vous ne pouvez pas répondre à ce sujet.