{PHP/MySQL} Popularité en %
Résolu/Fermé
Jeremy_me
Messages postés
31
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 septembre 2009
-
24 août 2009 à 00:44
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 - 3 sept. 2009 à 20:50
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 - 3 sept. 2009 à 20:50
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
- Mysql gratuit ou payant - Forum MySQL
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
- Mysql error 1 ✓ - Forum Réseaux sociaux
8 réponses
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
3 sept. 2009 à 11:43
3 sept. 2009 à 11:43
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.
TiboleParano
Messages postés
498
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
7 avril 2015
61
24 août 2009 à 11:09
24 août 2009 à 11:09
$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
Jeremy_me
Messages postés
31
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 septembre 2009
1
24 août 2009 à 21:03
24 août 2009 à 21:03
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!
Jeremy_me
Messages postés
31
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 septembre 2009
1
25 août 2009 à 10:18
25 août 2009 à 10:18
Personne pour m'aider s'il vous plait?
Merci beaucoup..
Merci beaucoup..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
TiboleParano
Messages postés
498
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
7 avril 2015
61
25 août 2009 à 12:02
25 août 2009 à 12:02
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 ;)
Jeremy_me
Messages postés
31
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 septembre 2009
1
2 sept. 2009 à 21:34
2 sept. 2009 à 21:34
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!
TiboleParano
Messages postés
498
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
7 avril 2015
61
3 sept. 2009 à 10:18
3 sept. 2009 à 10:18
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];
Jeremy_me
Messages postés
31
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 septembre 2009
1
3 sept. 2009 à 20:50
3 sept. 2009 à 20:50
Oh mon dieu, mais c'est génial! Ohlala! Je t'adore, tu sais? ;)
J'essaie ça dans la prochaine heure et je t'en donne des nouvelles! Milles merci! (On vois bien ici, un heureux incontrôlable <:0) )
Et oui, c'est très clair, merci!!
J'essaie ça dans la prochaine heure et je t'en donne des nouvelles! Milles merci! (On vois bien ici, un heureux incontrôlable <:0) )
Et oui, c'est très clair, merci!!