Calcul de moyennes

Bonsoir

Prise de tête pour un simple calcul de moyenne.
J'ai trois notes dans la table d'évaluations que je viens de faire. Un auteur peut recevoir plusieurs fois des notes et la table donne un truc comme ça
id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1 ce qui devrait en tout état de cause me donner: 7.66

Ma boucle ne fait pas le calcul correctement
<BOUCLE_evaluation(EVALUATIONS){id_auteur=#GET{acteur}}{tout}>#SET{note1,#NOTE_REFLEXE|plus{#NOTE_LUCIDITE}} #SET{note2,#GET{note1}|plus{#NOTE_CARACTERE}}</BOUCLE_evaluation> #SET{total,#TOTAL_BOUCLE|mult{3}} #SET{note3,#GET{note2}|div{#GET{total}|round{2}}}<//B_evaluation>

ET le résultat est incohérent. J'ai foiré quelque part, mais je ne trouve pas où!!

Bernard

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com

9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

Si je suis bien, je dois mettre #SET{total,0} avant la boucle. Mais comment accumuler dans la boucle les six notes? C'est la que je coince ..

Bernard

Nathan a écrit :

Ben, tu réinitialises tes notes a chaque passage dans la boucle, non?
Faudrait les mettre à zéro avant la boucle sur les évaluations d'un auteur donné, puis accumulé dedans les trois notes ainsi qu'incrémenter un compteur, puis diviser la somme des notes par le compteur.

Le 27 janv. 2010 à 23:29, Bernard Blazin a écrit :

Bonsoir

Prise de tête pour un simple calcul de moyenne.
J'ai trois notes dans la table d'évaluations que je viens de faire. Un auteur peut recevoir plusieurs fois des notes et la table donne un truc comme ça
id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1 ce qui devrait en tout état de cause me donner: 7.66

Ma boucle ne fait pas le calcul correctement
<BOUCLE_evaluation(EVALUATIONS){id_auteur=#GET{acteur}}{tout}>#SET{note1,#NOTE_REFLEXE|plus{#NOTE_LUCIDITE}} #SET{note2,#GET{note1}|plus{#NOTE_CARACTERE}}</BOUCLE_evaluation> #SET{total,#TOTAL_BOUCLE|mult{3}} #SET{note3,#GET{note2}|div{#GET{total}|round{2}}}<//B_evaluation>

ET le résultat est incohérent. J'ai foiré quelque part, mais je ne trouve pas où!!

Bernard

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com 9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc
    
--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com

9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

Le 27 janv. 10 à 23:56, Bernard Blazin a écrit :

Si je suis bien, je dois mettre #SET{total,0} avant la boucle. Mais comment accumuler dans la boucle les six notes? C'est la que je coince ..

en jouant avec des #SET{total#COMPTEUR_BOUCLE,...} ? je ne sais pas si c'est autorisé

Bernard

Nathan a écrit :

Ben, tu réinitialises tes notes a chaque passage dans la boucle, non?
Faudrait les mettre à zéro avant la boucle sur les évaluations d'un auteur donné, puis accumulé dedans les trois notes ainsi qu'incrémenter un compteur, puis diviser la somme des notes par le compteur.

Le 27 janv. 2010 à 23:29, Bernard Blazin a écrit :

Bonsoir

Prise de tête pour un simple calcul de moyenne.
J'ai trois notes dans la table d'évaluations que je viens de faire. Un auteur peut recevoir plusieurs fois des notes et la table donne un truc comme ça
id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1 ce qui devrait en tout état de cause me donner: 7.66

Ma boucle ne fait pas le calcul correctement
<BOUCLE_evaluation(EVALUATIONS){id_auteur=#GET{acteur}}{tout}>#SET{note1,#NOTE_REFLEXE|plus{#NOTE_LUCIDITE}} #SET{note2,#GET{note1}|plus{#NOTE_CARACTERE}}</BOUCLE_evaluation> #SET{total,#TOTAL_BOUCLE|mult{3}} #SET{note3,#GET{note2}|div{#GET{total}|round{2}}}<//B_evaluation>

ET le résultat est incohérent. J'ai foiré quelque part, mais je ne trouve pas où!!

Bernard

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com 9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com
9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 27/01/10 23:56, Bernard Blazin a écrit :

comment accumuler dans la boucle les six notes?

Le 27 janv. 2010 à 23:29, Bernard Blazin a écrit :

id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1

je remarque que dans ta table EVALUATIONS, id_auteur n'est pas une clef primaire.
il va donc falloir en premier lieu faire une boucle qui nous fournira
de manière unique l'identifiant de chaque auteur. en sql, c'est un
GROUP BY, en SPIP, c'est le critère {fusion ...}
puis, dans cette boucle nous rappellerons tous les résultats liés
à cet auteur en les additionnant. on en profite aussi pour compter
le nombre de notes (chaque retour de la boucle comptant pour 3,
puisqu'il y a 3 notes par enregistrement).

<BOUCLE_evaluation(EVALUATIONS) {id_auteur = #GET{acteur}}
                                 {fusion id_auteur}
                                 {tout}>
   #SET{total, 0}
   <BOUCLE_calc(EVALUATIONS) {id_auteur}>
     #SET{total, #GET{total}|plus{#NOTE_LUCIDITE}
                            |plus{#NOTE_LUCIDITE}
                            |plus{#NOTE_CARACTERE}
     }
   </BOUCLE_calc>
   auteur : #ID_AUTEUR
   <br />
   total notes : #GET{total}
   <br />
   nombre notes : [(#_calc:TOTAL_BOUCLE|mult{3})]
   <br />
   moyenne : [(#GET{total}|div{[(#_calc:TOTAL_BOUCLE|mult{3})]})]
   <hr>
</BOUCLE_evaluation>

(pas testé)

Oh oui, c'était bien comme ça qu'il fallait la faire! Pas si facile et pas si intuitive que ça cette boucle
En plus je ne connaissais pas le critère fusion! Ça ouvre pas mal de nouvelles perspectives !

Un grand merci à toi et à ceux qui ont bien voulu m'aider

Bernard

denisb a écrit :

Le 27/01/10 23:56, Bernard Blazin a écrit :

comment accumuler dans la boucle les six notes?

Le 27 janv. 2010 à 23:29, Bernard Blazin a écrit :

id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1

je remarque que dans ta table EVALUATIONS, id_auteur n'est pas une clef primaire.
il va donc falloir en premier lieu faire une boucle qui nous fournira
de manière unique l'identifiant de chaque auteur. en sql, c'est un
GROUP BY, en SPIP, c'est le critère {fusion ...}
puis, dans cette boucle nous rappellerons tous les résultats liés
à cet auteur en les additionnant. on en profite aussi pour compter
le nombre de notes (chaque retour de la boucle comptant pour 3,
puisqu'il y a 3 notes par enregistrement).

<BOUCLE_evaluation(EVALUATIONS) {id_auteur = #GET{acteur}}
                                {fusion id_auteur}
                                {tout}>
  #SET{total, 0}
  <BOUCLE_calc(EVALUATIONS) {id_auteur}>
    #SET{total, #GET{total}|plus{#NOTE_LUCIDITE}
                           |plus{#NOTE_LUCIDITE}
                           |plus{#NOTE_CARACTERE}
    }
  </BOUCLE_calc>
  auteur : #ID_AUTEUR
  <br />
  total notes : #GET{total}
  <br />
  nombre notes : [(#_calc:TOTAL_BOUCLE|mult{3})]
  <br />
  moyenne : [(#GET{total}|div{[(#_calc:TOTAL_BOUCLE|mult{3})]})]
  <hr>
</BOUCLE_evaluation>

(pas testé)

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com

9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

Le 28/01/10 10:38, Bernard Blazin a écrit :

En plus je ne connaissais pas le critère fusion! Ça ouvre pas mal de
nouvelles perspectives !

qui ici, finalement, est tout à fait inutile...
puisque une seule boucle :

   #SET{total, 0}
   <BOUCLE_calc(EVALUATIONS) {id_auteur = #GET{acteur} {tout}>
     #SET{total, #GET{total}|plus{#NOTE_REFLEXE}
                            |plus{#NOTE_LUCIDITE}
                            |plus{#NOTE_CARACTERE}
     }
   </BOUCLE_calc>
     acteur : #ID_AUTEUR
     <br />
     total notes : #GET{total}
     <br />
     nombre notes : [(#TOTAL_BOUCLE|mult{3})]
     <br />
     moyenne : [(#GET{total}|div{[(#TOTAL_BOUCLE|mult{3})]})]
     <hr>
   </B_calc>

est suffisante pour répondre à ta demande originale.

LOL! Pas grave ça m'a au moins appris deux choses:
1- Faire cette boucle
2- Qu'il y avait un critère fusion..

Merci

Bernard

denisb a écrit :

Le 28/01/10 10:38, Bernard Blazin a écrit :

En plus je ne connaissais pas le critère fusion! Ça ouvre pas mal de
nouvelles perspectives !

qui ici, finalement, est tout à fait inutile...
puisque une seule boucle :

  #SET{total, 0}
  <BOUCLE_calc(EVALUATIONS) {id_auteur = #GET{acteur} {tout}>
    #SET{total, #GET{total}|plus{#NOTE_REFLEXE}
                           |plus{#NOTE_LUCIDITE}
                           |plus{#NOTE_CARACTERE}
    }
  </BOUCLE_calc>
    acteur : #ID_AUTEUR
    <br />
    total notes : #GET{total}
    <br />
    nombre notes : [(#TOTAL_BOUCLE|mult{3})]
    <br />
    moyenne : [(#GET{total}|div{[(#TOTAL_BOUCLE|mult{3})]})]
    <hr>
  </B_calc>

est suffisante pour répondre à ta demande originale.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com

9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

Le 27/01/2010 23:56, Bernard Blazin a écrit :

Si je suis bien, je dois mettre #SET{total,0} avant la boucle. Mais
comment accumuler dans la boucle les six notes? C'est la que je coince ..

c'est qu'à chaque itération tu repars à 0 avec un nouveau set{note1}

tu devrais utiliser une seule note (pas 1 ni 2 ni 3)
et lui additionner tout sur elle.

ceci dit, sql serait infiniment plus efficace pour calculer une moyenne.
tu gagnerais énormément à créer un filtre
et à faire ça en php.

JLuc

Nathan a écrit :

Ben, tu réinitialises tes notes a chaque passage dans la boucle, non?
Faudrait les mettre à zéro avant la boucle sur les évaluations d'un
auteur donné, puis accumulé dedans les trois notes ainsi
qu'incrémenter un compteur, puis diviser la somme des notes par le
compteur.

Le 27 janv. 2010 à 23:29, Bernard Blazin a écrit :

Bonsoir

Prise de tête pour un simple calcul de moyenne.
J'ai trois notes dans la table d'évaluations que je viens de faire.
Un auteur peut recevoir plusieurs fois des notes et la table donne un
truc comme ça
id_auteur | note_reflexe | note_ lucidite | note_ caractere
--------------------------------------------------------
1 |10 | 6 | 5
2 |10 |10 |10
1 |5 |10 |10

Je cherche à faire la moyenne de toutes les notes pour l'id_auteur 1
ce qui devrait en tout état de cause me donner: 7.66

Ma boucle ne fait pas le calcul correctement
<BOUCLE_evaluation(EVALUATIONS){id_auteur=#GET{acteur}}{tout}>#SET{note1,#NOTE_REFLEXE|plus{#NOTE_LUCIDITE}}
#SET{note2,#GET{note1}|plus{#NOTE_CARACTERE}}</BOUCLE_evaluation>
#SET{total,#TOTAL_BOUCLE|mult{3}}
#SET{note3,#GET{note2}|div{#GET{total}|round{2}}}<//B_evaluation>

ET le résultat est incohérent. J'ai foiré quelque part, mais je ne
trouve pas où!!

Bernard

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com 9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc