requeter(sprintf( ' SELECT ce_image, ce_protocole, valeur, ce_utilisateur'. ' FROM del_image_vote'. ' WHERE ce_image = %d AND ce_protocole = %d', $id_image, $id_proto)); // 2) calculer la moyenne pondérée, le nombre de points // @ACHTUNG_ALARM attention à ce que cette méthode corresponde avec les // calculs dans GWT, notamment l'échelle de points !! $nbPoints = 0; $nbVotes = 0; //$echelle = array(-1, 0, 1, 4, 20); $echelle = array(1, 10, 100, 1000, 10000); $notesParOccurrences = array(); $utilisateurs = array(); foreach ($votes as $vote) { if (! in_array($vote['ce_utilisateur'], $utilisateurs)) { // un seul vote par utilisateur sur un protocole donné !! $utilisateurs[] = $vote['ce_utilisateur']; $note = $vote['valeur']; $nbPoints += $echelle[$note - 1]; if (array_key_exists($note, $notesParOccurrences)) { $notesParOccurrences[$note]++; } else { $notesParOccurrences[$note] = 1; } $nbVotes++; } } $moyennePonderee = 0; $diviseur = 0; foreach ($notesParOccurrences as $n => $o) { $moyennePonderee += ($n * $o * $o); $diviseur += ($o * $o); } if ($diviseur > 0) { $moyennePonderee = $moyennePonderee / $diviseur; } // 3) mise à jour de la table stats $db->requeter(sprintf( ' INSERT INTO del_image_stat (ce_image, ce_protocole, moyenne, nb_votes, nb_points)'. ' VALUES (%d, %d, %s, %d, %d)'. ' ON DUPLICATE KEY UPDATE moyenne = %s, nb_votes = %d, nb_points = %d', $id_image, $id_proto, number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints, number_format($moyennePonderee, 3, '.', ''), $nbVotes, $nbPoints)); } } ?>