{PHP/MySQL} Popularité en %
Résolu
Jeremy_me
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
Jeremy_me Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
Jeremy_me Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- {PHP/MySQL} Popularité en %
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Php alert - Forum PHP
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
8 réponses
Bonjour,
La première à chose à faire est de modifier ta table, en nommant autrement ta colonne count qui prête à confusion avec la fonction de même nom, et mettre un UNIQUE sur le terme recherché, pour pouvoir se servir du ON DUPLICATE KEY (servira à faire un update si la ligne est déjà présente lors de l'insert).
En gros ta table devrait ressembler à :
La première à chose à faire est de modifier ta table, en nommant autrement ta colonne count qui prête à confusion avec la fonction de même nom, et mettre un UNIQUE sur le terme recherché, pour pouvoir se servir du ON DUPLICATE KEY (servira à faire un update si la ligne est déjà présente lors de l'insert).
En gros ta table devrait ressembler à :
CREATE TABLE RECHERCHE ( terme_id INT UNSIGNED AUTO_INCREMENT, terme VARCHAR(255) NOT NULL, compteur INT NOT NULL DEFAULT 1, PRIMARY KEY(terme_id), UNIQUE(terme));Maintenant la façon dont tu insères une valeur après une recherche est à modifier aussi.
/* Un client effectue une recherche et il y a des résultats. On insère donc la valeur ($recherche) recherchée dans la table. $sql = "INSERT INTO RECHERCHE(terme) VALUES('" . mysql_real_escape_string($recherche) . "') ON DUPLICATE KEY UPDATE compteur=compteur+1"; $query = mysql_query($sql) or exit(mysql_error());Maintenant faire ce que tu désires peut s'effectuer de plusieurs manières, en voici une.
$sql = 'SELECT terme, compteur FROM RECHERCHE'; $query = mysql_query($sql); $listeRecherche = array(); while( $row = mysql_fetch_assoc($query) ) $listeRecherche[$row['terme']] = $row['compteur']; $total = array_sum($listeRecherche); // Affichage des résultats et % foreach( $listeRecherche as $terme => $cmpt ) echo $terme . '(' . $cmpt . 'fois) : ' . ($cmpt*100/$total) . '%<br>';En espérant avoir été clair.
$total_o = mysql_query('SELECT SUM(count) AS resultat FROM table');
$total= $total_o['resultat'];
et après quand la valeur count de chaque filme sue tu as est divisée par $total, si j'ai bien compris
$total= $total_o['resultat'];
et après quand la valeur count de chaque filme sue tu as est divisée par $total, si j'ai bien compris
Je te remercie de ta réponse. Peux-tu m'aider pour ce bout de code s'il te plait? C'est pour faire la moyenne, mais j'ai une erreur (je ne connais pas beaucoup MySQL malheureusement :( )
/////////////////// CALCUL DE LA POPULARITÉ ///////////////////////////
$total_o = mysql_query('SELECT SUM(count) AS resultat FROM searches'); // Calcul du total COUNT
$total= $total_o['resultat']; // Variable COUNT total
$row = mysql_fetch_array( $total_o );
$id_this = $row['id'];
$this_one = mysql_query("SELECT count FROM searches WHERE id = '$id_this' LIMIT 1");
$row = mysql_fetch_array( $this_one );
$total_one = $row['count']; // Variable COUNT pour ce résultat
echo $total_one."/".$total;
Et juste apres je fait la requete pour afficher le tableau :
$result = mysql_query("SELECT * FROM history WHERE ip = '$ip' ORDER BY time DESC");
Dans ce tableau, je dois utilisé les variables $total et $total_one pour chaque entré.. Mais je ne sais pas comment m'y prendre.
Sa doit être vraiment con comme erreur, mais je ne sais pas comment faire plusieurs requete pour la meme page, si je peux dire.
Un énorme merci pour l'aide!
/////////////////// CALCUL DE LA POPULARITÉ ///////////////////////////
$total_o = mysql_query('SELECT SUM(count) AS resultat FROM searches'); // Calcul du total COUNT
$total= $total_o['resultat']; // Variable COUNT total
$row = mysql_fetch_array( $total_o );
$id_this = $row['id'];
$this_one = mysql_query("SELECT count FROM searches WHERE id = '$id_this' LIMIT 1");
$row = mysql_fetch_array( $this_one );
$total_one = $row['count']; // Variable COUNT pour ce résultat
echo $total_one."/".$total;
Et juste apres je fait la requete pour afficher le tableau :
$result = mysql_query("SELECT * FROM history WHERE ip = '$ip' ORDER BY time DESC");
Dans ce tableau, je dois utilisé les variables $total et $total_one pour chaque entré.. Mais je ne sais pas comment m'y prendre.
Sa doit être vraiment con comme erreur, mais je ne sais pas comment faire plusieurs requete pour la meme page, si je peux dire.
Un énorme merci pour l'aide!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bon je vais pas tout te faire à ta place, je vais te montrer tes erreurs:
$total= $total_o['resultat']; // Variable COUNT total ok
$row = mysql_fetch_array( $total_o ); pas ok ->$total_o, si tu reviens à la requete de départ, il recoit qu'une valeur, la somme, tout le reste du tableau n'as pas été livré avec, il faut refaire une requete
après la boucle pour le tableau viens toute seule, c'est une classique:
rajoute à sa la recette magique pour faire un tableau: son code en html (ou xhtml, excusez si imprécision je fais)
mélanges le tout ...
Voilà =) ... et finalement jt'ai juste un peu maché le travail ;)
$total= $total_o['resultat']; // Variable COUNT total ok
$row = mysql_fetch_array( $total_o ); pas ok ->$total_o, si tu reviens à la requete de départ, il recoit qu'une valeur, la somme, tout le reste du tableau n'as pas été livré avec, il faut refaire une requete
$infos= mysql_query('SELECT * FROM searches');
après la boucle pour le tableau viens toute seule, c'est une classique:
while($ligne=mysql_fetch_array($infos)) { et ce code se repetera pour chaque ligne dans ta BDD SQL, en sachant que chaque fois $ligne contiendra les infos 'ID' 'Query' et 'Count' de la ligne suivante }
rajoute à sa la recette magique pour faire un tableau: son code en html (ou xhtml, excusez si imprécision je fais)
<table> <tr>//1ere ligne <td> cellule 1 </td> <td> cellule 2 </td> </tr> <tr>//2e ligne <td> cellule 3 </td> <td cellule 4 </td> </tr> </table>
mélanges le tout ...
<?php echo "<table><tr><td>id</td><td>querry</td><td>count</td></tr>"; $infos= mysql_query('SELECT * FROM searches'); while($ligne=mysql_fetch_array($infos)) { echo '<tr><td>'.$ligne['ID'].'</td><td>'.$ligne['querry'].'</td><td>'.$ligne['count'].</td></tr>'; }
Voilà =) ... et finalement jt'ai juste un peu maché le travail ;)
Me revoilà!
J'y suis presque, le seul petit (?) problème c'est que les entrés en double sont afficher en double.
Donc si par exemple le mot "Papa" à été chercher 2 fois, j'ai 2 fois papa avec le % de popularité (qui est le même)
Voici mon code :
<?php
$ip = $_SERVER['REMOTE_ADDR'];
mysql_connect("localhost", "*******", "******") or die(mysql_error());
mysql_select_db("******") or die(mysql_error());
/////////////////// CALCUL DE LA POPULARITÉ ///////////////////////////
$total_o = mysql_query('SELECT SUM(count) AS cnt FROM searches'); // Calcul du total COUNT
$data = mysql_fetch_array($total_o);
$total = $data[0];
echo "<table class=\"history\"><tr><td>Mots-clés</td><td style=\"width: 200px\">Popularité</td></tr>";
$infos= mysql_query('SELECT * FROM searches, history WHERE searches.query = history.query');
while($ligne=mysql_fetch_array($infos))
{
//$priv = $ligne['private']; // Variable Privée
//if($priv == "1") { $priv = "Recherche privée"; } else { $priv = ""; } // Si privée = 1, afficher un texte
$count = $ligne['count'];
$pop = round(($count * 100 / $total)+0.1, 2);
echo '<tr><td>'.$ligne['query'].'</td><td><div class="progress">'.$pop.' %<img src="/img/progress.png" width="'.$pop.'%" height="12"></div></td></tr>';
}
echo "</table>";
?>
Comment puis-je faire en sorte que une seul des entrés double s'affiche? Merci beaucoup!
J'y suis presque, le seul petit (?) problème c'est que les entrés en double sont afficher en double.
Donc si par exemple le mot "Papa" à été chercher 2 fois, j'ai 2 fois papa avec le % de popularité (qui est le même)
Voici mon code :
<?php
$ip = $_SERVER['REMOTE_ADDR'];
mysql_connect("localhost", "*******", "******") or die(mysql_error());
mysql_select_db("******") or die(mysql_error());
/////////////////// CALCUL DE LA POPULARITÉ ///////////////////////////
$total_o = mysql_query('SELECT SUM(count) AS cnt FROM searches'); // Calcul du total COUNT
$data = mysql_fetch_array($total_o);
$total = $data[0];
echo "<table class=\"history\"><tr><td>Mots-clés</td><td style=\"width: 200px\">Popularité</td></tr>";
$infos= mysql_query('SELECT * FROM searches, history WHERE searches.query = history.query');
while($ligne=mysql_fetch_array($infos))
{
//$priv = $ligne['private']; // Variable Privée
//if($priv == "1") { $priv = "Recherche privée"; } else { $priv = ""; } // Si privée = 1, afficher un texte
$count = $ligne['count'];
$pop = round(($count * 100 / $total)+0.1, 2);
echo '<tr><td>'.$ligne['query'].'</td><td><div class="progress">'.$pop.' %<img src="/img/progress.png" width="'.$pop.'%" height="12"></div></td></tr>';
}
echo "</table>";
?>
Comment puis-je faire en sorte que une seul des entrés double s'affiche? Merci beaucoup!
déja petite question: pourquoi as-tu laissé les commentaires qui contiennet les lignes de code, elles ne sont pas utilisées ou provisoirement mises de coté ?
ensuite, expliques ce qu'est une entrée double, précise en citantr une ligne de ton code pour que je situe bien
NB: pour info, tu peux remplacer
par
ensuite, expliques ce qu'est une entrée double, précise en citantr une ligne de ton code pour que je situe bien
NB: pour info, tu peux remplacer
$total_o = mysql_query('SELECT SUM(count) AS cnt FROM searches'); // Calcul du total COUNT $data = mysql_fetch_array($total_o); $total = $data[0];
par
$data = mysql_fetch_array(mysql_query('SELECT SUM(count) AS cnt FROM searches')); $total = $data[0];