Etablir un Top 3

Résolu/Fermé
zevinny Messages postés 164 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 février 2010 - 23 avril 2008 à 20:17
zevinny Messages postés 164 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 février 2010 - 1 mai 2008 à 16:18
Bonjour,

C'est tout bête mais là j'ai besoin d'un coup de pousse (plutôt de clavier...)!

J'aimerais comme mon titre l'indique établir un top 3, genre podium sur les messages postés dans mon site.

Je possède une BDD, grâce à un code PHP j'iinsert dans cette base:

un titre (input field)
une nouvelle (textarea)
un nom et prénom représenté par "nom, prenom" (input field en read only, donc représenté toujours de la même façon)

Grâce à es données entrées j'aimerais afficher sous un petit podium les 3 personnes qui postes le plus!

Afin de faire une sélection sur les noms, je commence par

select nom, count * from tableau_info;


ce qui je penses doit m'afficher d'un côté les noms et de l'autre la quantité à côté de chaque noms...

Si je me trompe pas, comment dois je faire pour la suite?

Je suppose que je dois d'abord afficher le plus grand puis je "rétrograde", enfin grande question...

Merci d'avance pour votre aide!
A voir également:

7 réponses

ekudarius Messages postés 174 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 mai 2008 51
23 avril 2008 à 20:26
Salut,

j'ai une idées pour toi :

- Tu récupère le nombre de post dans ta bdd (si cela n'existe pas tu le fait :P il te suffit de lire puis d'incrémenter le chiffre lorsque la personne post).
- Tu créer une boucle qui doit se répeter 3 fois seulement.
- Et tu affiche le nom des personnes dans l'ordre des posts.

Pour plus de renseignement post.

Bonne chance
0
zevinny Messages postés 164 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 février 2010 56
23 avril 2008 à 20:48
C'est un peu claire mais pas trop!

Je vois ou tu veux en venir, mais si je commence je vais mettre beeeeaauuucccooouuuppp de temps! héhé...

Le hic est la boucle, je prends un while du plus grand au plus petit i++ jusqu'a 3 non?

Bon allons y!
0
ekudarius Messages postés 174 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 mai 2008 51
23 avril 2008 à 21:01
Voila le début :

<?php
$nbr = '0' ;
while($nbr < 3)
{
$nbr++ ;
// Reste du code ....
}
?>
0
ekudarius Messages postés 174 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 mai 2008 51
23 avril 2008 à 21:13
Sinon voici un exemple mais je l'ai pas testé :P


Top 3 :

<?php
$nbr = '0' ;
while($nbr < 3) // Boucle qui s'effectue 3 fois seulement
{
$nbr++ ;
mysql_connect("Nom de l'hote", "login", "pass");
mysql_select_db("nom de ta bdd");
$reponse = mysql_query("SELECT * FROM tableau_info ORDER BY post DESC"); // Sélectionne toutes les données de la bdd "tableau_info" dans l'ordre décroissant de la variable "post"

while ($donnees = mysql_fetch_array($reponse) ) // Boucle permetant de lister les 3 leaders :P
{
echo $donnees['pseudo'];
echo $donnees['post'];
echo $donnees['date_inscription'];
}
}
mysql_close(); // Déconnexion de MySQL
?>

Encore une fois n'hésite pas à re-poster si sa marche pas ou si tu ne comprend pas quelque chose.
0
ekudarius Messages postés 174 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 mai 2008 51
23 avril 2008 à 21:32
J'ai modifier en faisant un tableau et avec les données de ta bdd :

<?php

echo "Top 3 :" ;

$nbr = '0' ;
while($nbr < 3) // Boucle qui s'effectue 3 fois seulement
{
$nbr++ ;
mysql_connect("Nom de l'hote", "login", "pass");
mysql_select_db("nom de ta bdd");
$reponse = mysql_query("SELECT * FROM tableau_info ORDER BY post DESC"); // Sélectionne toutes les données de la bdd "tableau_info" dans l'ordre décroissant de la variable "post"

while ($donnees = mysql_fetch_array($reponse) ) // Boucle permetant de lister les 3 leaders :P
{
?><table><tr>
<th>Nom / Prénom</th>
<th>Nombre de posts</th>
</tr>

<tr>
<td><?php echo '$donnees['nom'], $donnees['prenom']'; ?></td>
<td><?php echo $donnees['post'] ; ?></td>
</tr>
<?php } ?>
</table>
<?php }
mysql_close(); // Déconnexion de MySQL
?>


Test et tiens moi au courant :P
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ekudarius Messages postés 174 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 mai 2008 51
23 avril 2008 à 21:51
Je suis désolé mais je t'avais dis n'importe quoi (la fatigue :P)

Voici ce qu'il faut faire :

<?php

echo "Top 3 :" ;

mysql_connect("localhost", "tt", "cgo3abd");
mysql_select_db("tt");
$reponse = mysql_query("SELECT * FROM tableau_info ORDER BY post DESC LIMIT 0,3"); // Sélectionne toutes les données de la bdd "tableau_info" dans l'ordre décroissant de la variable "post"

while ($donnees = mysql_fetch_array($reponse) ) // Boucle permetant de lister les 3 leaders :P
{
?><table><tr>
<th>Nom / Prénom</th>
<th>Nombre de posts</th>
</tr>

<tr>
<td><?php print '<center>' . $donnees['nom'] . ', ' . $donnees['prenom'] . '</center>' ; ?></td>
<td><?php print'<center>' . $donnees['post'] . '</center>' ; ?></td>
</tr>
<?php } ?>
</table>

<?php
mysql_close(); // Déconnexion de MySQL
?>

On fait la recherche dans notre bdd puis on ba lister les valeur de post dans l'ordre décroissant (DESC) puis on va limiter à 3 (LIMIT 0,3)

Voila et je pense que la se sera bon :P

Voici le test que j'ai effectué :

http://tt.freeheberg.com/test.php
0
zevinny Messages postés 164 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 février 2010 56
25 avril 2008 à 19:59
waw, super, je me suis basé également sur le limit 0,3

j'ai commencé par un while en incrémentant jusque 3, ton code m'aide énormément!

merci!
0
zevinny Messages postés 164 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 février 2010 56
1 mai 2008 à 16:18
J'aimerais quand même poster un truc plus simple...

Est ce que ceci n'est pas plus mieux (<= façon de parler hein)

SELECT pseudo, count(pseudo) total FROM tableau_info GROUP BY pseudo ORDER BY total DESC LIMIT 0,3;

et echo ensuite sur le résultat [0] et [1]?

Bien à toi
0