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
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
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
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).
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 :
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).
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