Affiché le nombre total de vote par note

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affiché le nombre total de vote par note

Re: Affiché le nombre total de vote par note

par j_saisrien » 03 nov. 2019, 06:35

Hello

Tu n'y arriveras pas comme ça.
La fonction SUM(note) ne te donnera pas le nombre de votes total. La valeur des notes ne s'additionne pas. Par exemple, tu ne peux pas dire 2 notes de 5 donnent 10. Ça ne fait pas de sens.

Ton pourcentage tu vas l'obtenir avec l'équation suivante:
$pourcentage = ($nb_votes/$total_de_votes)*100;

Tu as déjà le nombre de votes pour chaque note dans ta variable $nb_votes.
Il te reste à trouver le nombre total de votes, qui est le nombre d'entrées dans ta table.

D'après moi tu dois oublier le SUM() et intégrer une nouvelle requête avec COUNT(*) pour le nombre d'entrées de ta table.
a+

Re: Affiché le nombre total de vote par note

par yoann38 » 02 nov. 2019, 19:26

Effectivement c'est plus de la logique,
 <?php
                                 if ($avis_note['nb_vote'] =! 0) {

                                  $note = array(5,4,3,2,1,0);
                                  for($i=0; $i<=5; $i++){
                                  $note[$i];
                                    
                                  $valeur = array('Excellent', 'Bien', 'Sympa', 'C\'est pas mal', 'Pas terrible', 'A éviter');
                                  for($i=0; $i<=5; $i++){
                                  $valeur[$i];
                                    
                                 $note_avis = $bdd->prepare('SELECT SUM(note) as total_de_note, COUNT(*) as nb_votes FROM avis WHERE note = ? AND id_bar= '.$bar_id);
                                 $note_avis->execute(array($note[$i]));   
                                       while($dos=$note_avis->fetch()){
                                  $nb_votes= $dos['nb_votes'];
                                      echo $nb_votes . ' votes pour la note ' . $note[$i] . ' ' . $valeur[$i] . '<br /> ' ;
                                    
                                     }
                                    }
                                   }
                                }
                                ?>
Il me reste plus qu'à calculer le pourcentage de votes selon le nombre de votes total du coup

Re: Affiché le nombre total de vote par note

par j_saisrien » 02 nov. 2019, 18:27

Salut

Tu sais je n'ai pas choisi mon pseudo au hasard. Il y a des limites à mes connaissances et à l'aide que je peux offrir.

Je ne pense pas que tu aies besoin d'une fonction pour ça. As-tu essayé d'inverser l'ordre des chiffres dans l'array ? Et aussi l'ordre des commentaires. Tu obtiendrais sans doute le résultat que tu souhaites.
a+

Re: Affiché le nombre total de vote par note

par yoann38 » 02 nov. 2019, 17:34

En reprenant ton exemple:
 <?php
                                  $note = array(0,1,2,3,4,5);
                                  for($i=0; $i<=5; $i++){
                                  $note[$i];
                                    
                                  $valeur = array('A éviter', 'Pas terrible', 'C\'est pas mal', 'Sympa', 'Bien', 'Excellent');
                                  for($i=0; $i<=5; $i++){
                                  $valeur[$i];
                                    
                                 $note_avis = $bdd->prepare('SELECT COUNT(*) as nb_votes FROM avis WHERE note = ? AND id_bar= '.$bar_id);
                                  $note_avis->execute(array( $note[$i]));   
                                       while($dos=$note_avis->fetch()){
                                  $nb_votes= $dos['nb_votes'];


                                  $pourcentage_vote =  $nb_votes * 100  / $avis_note['nb_vote'];

                                      echo '<div class="row">
                                            <div class="col-lg-10 col-9">
                                                <div class="progress">
                                                    <div class="progress-bar" role="progressbar" style="width: '.$pourcentage_vote.'%" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100"></div>
                                                </div>
                                            </div>
                                            <div class="col-lg-2 col-3"><small><strong>'.$valeur[$i].' ('.$nb_votes.')</strong></small></div>
                                        </div>';

                                      //echo $nb_votes . ' votes pour la note ' . $note[$i] . ' ' . $valeur[$i] . '<br /> ' ;
                                    
                                  }
                                  }
                                    }
                                ?>
Par contre exist'il une fonction pour affiché à l'inverse.
C'est dire commencer par Excellent, Bien, ... plutot que l'inverse
Je préfere affiché les bonnes notes avant

Re: Affiché le nombre total de vote par note

par j_saisrien » 01 nov. 2019, 15:20

Salut

Il faut que tu fasses des essais. Par exemple, essaie quelque chose comme ça et modifie-le comme tu veux.

Code : Tout sélectionner

<?php $note = array(0,1,2,3,4,5); for($i=0; $i<=5; $i++){ $note[$i]; $valeur = array(' Mais c\'est catastrophique', ' quel horreur j\'en suis malade,', ' passable, keep up the good work! ', ' pas fort mais un peu mieux', ' ah là c\'est bon ', 'fantastique, je t\'aime. Tu me rends fou'); for($i=0; $i<=5; $i++){ $valeur[$i]; $note_avis = $bdd->prepare('SELECT COUNT(*) as nb_votes FROM avis WHERE note = ?'); $note_avis->execute(array( $note[$i])); while($dos=$note_avis->fetch()){ $nb_votes= $dos['nb_votes']; echo $nb_votes . ' votes pour la note ' . $note[$i] . ' ' . $valeur[$i] . '<br /> ' ; } } } ?>
Bonne journée

Re: Affiché le nombre total de vote par note

par yoann38 » 01 nov. 2019, 12:30

Ca se rapproche beaucoup de ce que je souhaite faire.
Par contre estil possible de changé les valeurs pour l'array,

Exemple : 1= horrible, 2= pas mal, 3= Moyen
<?php
                                  $note = array(0,1,2,3,4,5);
                                  for($i=0; $i<=5; $i++){
                                  $note[$i];
                                  $note_avis = $bdd->prepare('SELECT COUNT(*) as nb_votes FROM avis WHERE note = ? AND id_bar= '.$bar_id);
                                  $note_avis->execute(array( $note[$i]));   
                                       while($dos=$note_avis->fetch()){
                                  $nb_votes= $dos['nb_votes'];
                                    echo $nb_votes . ' votes pour la note ' . $note[$i] . '<br />';
                                    
                                  }
                                }
                                ?>

Re: Affiché le nombre total de vote par note

par j_saisrien » 31 oct. 2019, 23:28

Salut yoann38

Il me manque peut-être des informations mais si tu as une table nommée avis avec les colonnes mentionnées dans ton lien, j'obtiens le résultat que tu désires de la manière suivante:

Code : Tout sélectionner

$note = array(0,1,2,3,4,5); for($i=0; $i<=5; $i++){ $note[$i]; $note_avis = $bdd->prepare('SELECT COUNT(*) as nb_votes FROM avis WHERE note = ?'); $note_avis->execute(array( $note[$i])); while($dos=$note_avis->fetch()){ $nb_votes= $dos['nb_votes']; echo $nb_votes . ' votes pour la note ' . $note[$i] . '<br />'; } } ?>
avec cette formule j'obtiens

2 votes pour la note 0
5 votes pour la note 1
2 votes pour la note 2
3 votes pour la note 3
0 votes pour la note 4
2 votes pour la note 5

a+

Re: Affiché le nombre total de vote par note

par yoann38 » 31 oct. 2019, 17:46

Le résultat obtenu est celui attendu, éxécuté sous PMA:
SELECT COUNT(*) AS nb_par_note, note AS total FROM `avis` WHERE `id_bar`= '1' GROUP BY note ORDER BY note

Renvoi:
nb_par_note | total
1 0
2 1
1 2
3 5

Dans l'exemple j'ai bien 3 fois la notes de 3 pour l'établissement 1

Re: Affiché le nombre total de vote par note

par Spols » 31 oct. 2019, 15:52

ta requète n'est pas bonne.

déjà que tu y incorpore ta variable en direct et puis tu utilise quand même bindParam qui ne sert à rien.

Commence par bien préparer ta requète avec phpmyadmin pour être sur d'obtenir le résultat voulu. ensuite incorpore la dans ton php

Re: Affiché le nombre total de vote par note

par yoann38 » 31 oct. 2019, 14:47

J'ai fait un dump de résult mais bon ...

array (size=2)
'nb_par_note' => string '1' (length=1)
'total' => string '0' (length=1)
foreach ($arr1 as $key => $val) {
                                    echo $key.' ('.$result['nb_par_note'].')<br>';
                                }
                                var_dump($result);
Code actuel:
?php
                                $count_vote= "SELECT COUNT(*) AS nb_par_note, note AS total FROM `avis` WHERE `id_bar`= $bar_id GROUP BY note ORDER BY note";
                                $listing_note = $bdd->prepare($count_vote);
                                $listing_note->bindParam(':id_bar', $bar_id);
                                $listing_note->execute();
                                $result = $listing_note->fetch(PDO::FETCH_ASSOC);
                              
                                $arr1 = array("Excellent" =>5, "Bien" => 4, "Moyen" => 3, "Pas terrible" => 2, "Médiocre" => 1);
                               
             
                                foreach ($arr1 as $key => $val) {
                                    echo $key.' ('.$result['nb_par_note'].')<br>';
                                }
                                var_dump($result);

                                ?>
J'ai bien les mentions Excellent, bien, médiocre... qui s'afffiche mais le bon nombre total de note par mentions

Re: Affiché le nombre total de vote par note

par Spols » 31 oct. 2019, 14:37

tu dois descendre un cran en plus dans $result.

fais un var_dump() pour en connaitre la structure

Re: Affiché le nombre total de vote par note

par yoann38 » 31 oct. 2019, 10:43

Alors pour illustré ce que je souhaite, voilà un célèbre site utilisant ce que je souhaite faire: ( Note attribué )
https://www.tripadvisor.fr/AttractionPr ... rance.html

Pour ce qui est de la table:
http://zupimages.net/viewer.php?id=19/44/206k.jpg

L'idée est d'avoir du coup tous les notes affiché de 1 à 5 et le nombres de votes qu'il y a eu pour chaque notes, même si il y en à pas eu pour certaines....

Coté code:
Je repars de zéro, juste avec ma requete et mon array souhaité:
// Progresse bar nombre de vote par Note
                                $count_vote= "SELECT COUNT(*) AS nb_par_note, note AS total FROM `avis` WHERE `id_bar`= $bar_id GROUP BY note ORDER BY note";
                                $listing_note = $bdd->prepare($count_vote);
                                $listing_note->bindParam(':id_bar', $bar_id);
                                $listing_note->execute();
                                $result = $listing_note->fetch(PDO::FETCH_ASSOC);
                              
                                $arr1 = array("Excellent" =>5, "Bien" => 4, "Moyen" => 3, "Pas terrible" => 2, "Médiocre" => 1);
                               
             
                                foreach ($arr1 as $key => $val) {
                                    echo $key.' ('.$result['nb_par_note'].')<br>';
                                }
Je me retrouve avec:
Excellent (1)
Bien (1)
Moyen (1)
Pas terrible (1)
Médiocre (1)

Mais je n'ai pas qu'uen seule note de chaque....

Re: Affiché le nombre total de vote par note

par Naroth » 30 oct. 2019, 16:36

Attend je me suis peut être emballé.

A quoi ressemble la structure de ta table ?

Suite à ton premier message, j'ai déduis que tu avais une table contenant une colonne "note" et une colonne "nb_par_vote" stockant le nombre de votre par note
Ai-je mal compris ?

Re: Affiché le nombre total de vote par note

par yoann38 » 30 oct. 2019, 11:33

Le but est d'affiché le nombre de vote par note de 1 à 5

Du coup j'ai fait un count et calculer le pourcentage de votes selon la note.
Mais je souhaite avoir toutes les notes de 1 à 5, dans mon cas si pas de note de 4 alors rien ne s'affiche :

Code actuel:
 <?php
                                // Progresse bar nombre de vote par Note
                                $count_vote= "SELECT COUNT(*) AS nb_par_note, note AS total FROM `avis` WHERE `id_bar`= $bar_id GROUP BY note ORDER BY note";
                                $listing_note = $bdd->prepare($count_vote);
                                $listing_note->bindParam(':id_bar', $bar_id);
                                $listing_note->execute();


                                while($listing_by_note = $listing_note->fetch(PDO::FETCH_ASSOC)){  
                                    
                                    // Pourcentage = Nombre de vote correspond à  la note * 100 diviser par le nombre total de vote pour l'établissement
                                    $pourcentage_vote =  $listing_by_note['nb_par_note'] * 100  / $avis_note['nb_vote'];

                                    echo '<div class="row">
                                            <div class="col-lg-10 col-9">
                                                <div class="progress">
                                                    <div class="progress-bar" role="progressbar" style="width:'.$pourcentage_vote.'%" aria-valuenow="'.$pourcentage_vote.'" aria-valuemin="0" aria-valuemax="100"></div>
                                                </div>
                                            </div>
                                            <div class="col-lg-2 col-3"><small><strong>'.$listing_by_note['nb_par_note'].'</strong></small></div>
                                        </div>';

                                } 

                                ?>

Re: Affiché le nombre total de vote par note

par Naroth » 28 oct. 2019, 21:41

Bonsoir,

Regarde du côté de la fonction count en plus de ton group by