Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
833 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Creation Classement PHP par mois

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Creation Classement PHP par mois

n°1984325
tszlachter
Posté le 15-04-2010 à 14:16:23  profilanswer
 

Bonjour,  
 
J'ai créé un classement en php de mes membres les plus actifs mais je voudrais également créer un classement de ces membres par mois, et si possible que le changement de mois se fasse automatiquement.
 
Voici mon classement:
 

Code :
  1. <tr><td width="500" border="2" align=center>
  2. <center><strong><font size="3" color="#8fce05"><u>Les meilleurs surfeurs:</u></font></strong><br><br>
  3. <?php
  4. // on se connecte à MySQL (à remplir)  
  5. $db = mysql_connect('******', '******', '******');
  6. // on sélectionne la base (à remplir)  
  7. mysql_select_db('******',$db);
  8. // Tableau des meilleurs surfeurs
  9. $recup_surfer =mysql_query( 'SELECT DISTINCT `name`, `lifetime_pages` FROM `user` ORDER BY `lifetime_pages` DESC LIMIT 0, 10 '); 
  10. echo mysql_error();
  11. echo '<table width=500 border=2 align=center>';
  12. echo '<tr><td align=center><strong><font size=2 color=#8fce05>Nr</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Utilisateur</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Pages vues</font></strong></td></tr>';
  13. $compteur = 1;
  14. while($best_surfer = mysql_fetch_array($recup_surfer)){
  15.      // Mise en forme des données à revoir  
  16.  echo '<tr>';
  17.      echo "<td align='center'><font size=2 color=#ffffff>".$compteur."</font></td>";
  18.      echo "<td align='center'><font size=2 color=#ffffff>".$best_surfer["name"]."</font></td>";
  19.      echo "<td align='center'><font size=2 color=#ffffff>".$best_surfer["lifetime_pages"]."</font></td>";
  20.      $compteur++;
  21.  echo '</tr>';
  22. }
  23.  echo '</table>';
  24. ?>
  25. <br><br><br>
  26. </td></tr>


 
 
Après avoir chercher, j'ai trouvé ceci: WHERE date >= '2010-04-01 00:00:00' AND date <= '2010-04-30 00:00:00'
 
mais je n'ai pas de champ date dans ma table, j'en ai créé une qui reste tout le temps a 0000-00-00
 
 
Soit, quelqu'un pourrait m'aider svp ?

mood
Publicité
Posté le 15-04-2010 à 14:16:23  profilanswer
 

n°1984329
xxbenitoxx
Posté le 15-04-2010 à 14:24:36  profilanswer
 

Salut,
 
Est ce que tu pourrais ajouter le code lorsque tu insère des données ans ta table ?

n°1984341
rufo
Pas me confondre avec Lycos!
Posté le 15-04-2010 à 14:31:35  profilanswer
 

ben faudrait que ton champ date (à ne surtout pas appeler comme ça!!!) soit renseigné par ton appli, il va pas se renseigner tout seul :/
 
Pour info, pour faire des stats sur un site, t'as l'outil GPL Piwik. Ca fait tout ça et bien plus... Pas la peine de réinventer la roue.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1984347
xxbenitoxx
Posté le 15-04-2010 à 14:37:39  profilanswer
 

Merci pour l'info RUFO ( Piwik)

n°1984351
tszlachter
Posté le 15-04-2010 à 14:41:03  profilanswer
 

Ben en fait ce n'est pas des stats de mon site dont j'ai besoin mais des stats de mes membres.
 
Je voudrais faire un classement par mois de mes membres pour en faire un concours mensuel
 
mon classement il est fait, j'ai juste besoin de savoir comment faire pour qu'il n'affiche que les stats des membres du mois en cours (et si possible faire en sorte qu'il s'actualise automatiquement chaque mois)


Message édité par tszlachter le 15-04-2010 à 14:43:00
n°1984370
rufo
Pas me confondre avec Lycos!
Posté le 15-04-2010 à 14:49:54  profilanswer
 

ben faut avoir un champ de type datetime qui est renseigné à chaque fois qu'un utilisateur vient sur ton site (ou sur chaque page du site).
 
Si tu travaille avec les date et heure, pour les regroupement par date, tu dois faire un SELECT `name`, DATE_FORMAT(ChampDate,'%Y-%m') AS Mois FROM .... WHERE DATE_FORMAT(ChampDate,'%Y-%m-%d') BETWEEN "2010-01-01" AND "2010-03-31" GROUP BY Mois, `name`


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1984373
tszlachter
Posté le 15-04-2010 à 14:52:14  profilanswer
 

ok merci je vais tester tout ça

n°1984412
xxbenitoxx
Posté le 15-04-2010 à 15:22:45  profilanswer
 

Par conter il faut que ton champ 'DATETIME' soit bien renseigné, tu nous avais dis qu'il était tout le temps à 0000

n°1984676
tszlachter
Posté le 16-04-2010 à 10:16:53  profilanswer
 

Bon j'avance un petit peu mais je m'en sors toujours pas donc je reviens vers vous, je vais noter un max de détail pour que vous aillez le plus facile à m'aider.
 
Question de base:
 
Comment faire un classement des meilleurs surfeurs par mois (en vue de faire un concours chaque mois) et si possible que ce classement se réactualise automatiquement chaque mois
 
Pour résumer:
 
-J'ai 2 tables qui m'intéresse: 7stat et user
 
---7stat: table qui sert à stocker le nombre de visite de chaque membre chaque jour
 
 il y a 3 champ intéressants: usrid (id du membre), date (du type yyyy-mm-dd), et pg_views (total des pages vues du jour pour chaque membre)
 
Aperçu de la table:

Code :
  1. usrid         date          pg_views
  2. 1   2010-04-10     2
  3. 2  2010-04-11   3
  4. 1  2010-04-12   748
  5. 5  2010-04-12   478
  6. 6  2010-04-12   745
  7. 7  2010-04-12   87
  8. 6  2010-04-13   1379
  9. 1  2010-04-13   3750
  10. 9  2010-04-13   57
  11. 8  2010-04-13   2019
  12. 10  2010-04-13   375
  13. 11  2010-04-13   95


 
 
---user: table qui stock les données du membre
 
il y a 3 champ intéressants: id (id du membre), name (pseudo du membre), lifetime_pages (total des pages vues pour chaque membre)
 
 
 
En bidouillant bcp j'ai reussi à faire ceci:
 
J'ai mon tableau, mais il n'affiche que moi (soit le membre connecté voit son pseudo avec ses stats), la date n'est pas automatique mais lorsque je la change ça fonctionne.
 
Donc il reste à afficher le top 10 (et pas uniquement le membre connecté) et ensuite actualiser pour avoir mon classement chaque mois
 

Code :
  1. <?php
  2. // on se connecte à MySQL (à remplir)  
  3. $db = mysql_connect('*****', '*****', '*****');
  4. // on sélectionne la base (à remplir)  
  5. mysql_select_db('*****',$db);
  6. // Tableau des meilleurs surfeurs
  7. $recup_surfer =mysql_query( "SELECT SUM(pg_views) as `usrid`, `date` FROM 7stat WHERE usrid=$usrid AND date >= '2010-04-01' AND date <= '2010-04-30' ORDER BY `pg_views` DESC LIMIT 0, 10" ); 
  8. $classement=current(mysql_fetch_array(mysql_query("SELECT SUM(pg_views) as `usrid`, `date`, `pg_views` FROM 7stat WHERE usrid=$usrid AND date >= '2010-04-01' AND date <= '2010-04-30' ORDER BY `pg_views` DESC LIMIT 0, 10" )));
  9. echo mysql_error();
  10. echo '<table width=500 border=2 align=center>';
  11. echo '<tr><td align=center><strong><font size=2 color=#8fce05>Nr</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Utilisateur (ID)</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Pages vues</font></strong></td></tr>';
  12. $compteur = 1;
  13. while($best_surfer = mysql_fetch_array($recup_surfer)){
  14.      // Mise en forme des données à revoir  
  15.  echo '<tr>';
  16.      echo "<td align='center'><font size=2 color=#ffffff>".$compteur."</font></td>";
  17.      echo "<td align='center'><font size=2 color=#ffffff>".$usrname." (".$usrid." )</font></td>";
  18.      echo "<td align='center'><font size=2 color=#ffffff>".$classement."</font></td>";
  19.      $compteur++;
  20.  echo '</tr>';
  21. }
  22.  echo '</table>';
  23. ?>


 
 
 
Si vous voulez voir en ligne, inscrivez-vous la: http://autosurf.astuceargent.com/
et puis rdv la tout en bas: http://autosurf.astuceargent.com/m [...] urfers.php


Message édité par tszlachter le 16-04-2010 à 10:18:33
n°1984783
Fred999
Rabat-joie
Posté le 16-04-2010 à 12:20:51  profilanswer
 

Ton select devrait être

 

select usrid,
         sum(pg_views) as "pg_views"
from matable
where date between <début du mois> and <fin du mois>
group by usrid
order by sum(pg_views)
limit 0, 10

 

Ton SUM(pg_views) as `usrid`, c'est comme si tu disais que 10 patates = 1 carotte, techniquement ça ne gène pas mais fonctionnellement c'est faux.

 

Le tableau n'affiche que l'utilisateur connecté pour la bonne et simple raison qu'il y a la clause "WHERE usrid=$usrid".

 

Comme on te l'a déjà dit,
- n'utilise JAMAIS de mot qui ressemble trop à un mot-clé pour nommer un champ : ici, "date",
- préfère le BETWEEN au "champ1 >= valeur 1 AND champ1 <= valeur2".

 


Et un dernier truc : la présentation du code, qui t'aurait permis de voir pourquoi ton tableau n'affiche que l'utilisateur connecté. Préfère un truc comme :

 
Code :
  1. $requete = "select champ1
  2.             from   table1 t1
  3.                        inner join table2 t2 on t1.id = t2.id
  4.             where  t1.critere1 = $valeur1
  5.             and    t2.critere2 = valeur2";
  6. mysql_query($requete) or die ($message);
 

C'est BEAUCOUP plus lisible, à terme quand il faut maintenir tu gagnes pas mal de temps.


Message édité par Fred999 le 16-04-2010 à 12:21:06
mood
Publicité
Posté le 16-04-2010 à 12:20:51  profilanswer
 

n°1984832
rufo
Pas me confondre avec Lycos!
Posté le 16-04-2010 à 13:49:04  profilanswer
 

remarque en passant : je suis pas sûr que ça soit une bonne idée de faire commencer le nom d'une table par un chiffre :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1984838
Fred999
Rabat-joie
Posté le 16-04-2010 à 13:53:22  profilanswer
 

Si on commence comme ça, faut faire un topo sur la nomenclature des bases de données :o

n°1984868
tszlachter
Posté le 16-04-2010 à 14:21:38  profilanswer
 

Merci bcp, mon classement fonctionne correctement !
 
Il reste juste à actualiser automatiquement la date du classement chaque mois pour ne pas devoir le faire à la main chaque début de mois.
 
Malgré tout j'ai encore (et oui ...  :pt1cable: ) un petit probleme.
 
Comment afficher le nom d'un membre dont le champ est dans une autre table ?
 
le champ 'name' se trouve dans ma table 'user'
 
PS: merci bcp a Fred999 pour m'avoir fourni des explications supplémentaires pour ma compréhension.
 
 
Rappel du code:
 

Code :
  1. <?php
  2. // on se connecte à MySQL (à remplir)  
  3. $db = mysql_connect('******', '******', '******');
  4. // on sélectionne la base (à remplir)  
  5. mysql_select_db('******',$db);
  6. // Tableau des meilleurs surfeurs
  7. $recup_surfer =mysql_query( "SELECT `usrid`,  sum(pg_views) as `pg_views`, `champdate` FROM 7stat WHERE champdate BETWEEN '2010-04-01' AND '2010-04-30' GROUP BY usrid ORDER BY sum(pg_views) DESC LIMIT 0, 10" ); 
  8. echo mysql_error();
  9. echo '<table width=500 border=2 align=center>';
  10. echo '<tr><td align=center><strong><font size=2 color=#8fce05>Nr</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Utilisateur (ID)</font></strong></td><td align=center><strong><font size=2 color=#8fce05>Pages vues</font></strong></td></tr>';
  11. $compteur = 1;
  12. while($best_surfer = mysql_fetch_array($recup_surfer)){
  13.      // Mise en forme des données à revoir  
  14.  echo '<tr>';
  15.      echo "<td align='center'><font size=2 color=#ffffff>".$compteur."</font></td>";
  16.      echo "<td align='center'><font size=2 color=#ffffff>(".$best_surfer["usrid"]." )</font></td>";
  17.      echo "<td align='center'><font size=2 color=#ffffff>".$best_surfer["pg_views"]."</font></td>";
  18.      $compteur++;
  19.  echo '</tr>';
  20. }
  21.  echo '</table>';
  22. ?>

n°1984895
Fred999
Rabat-joie
Posté le 16-04-2010 à 15:06:02  profilanswer
 

La date du classement... en PHP, il y a une fonction date() pour récupérer la date système.
 
Sinon, pour ta question, je te conseille sérieusement de te documenter sur les bases du SQL... cela te sera plus utile que de voir une requête tout faite.

n°1985031
tszlachter
Posté le 16-04-2010 à 23:12:28  profilanswer
 

Pour insérer le pseudo du membre j'ai utilisé INNER JOIN comme ceci:
 
$recup_surfer =mysql_query( "SELECT user.name as `sname`, `usrid`,  sum(pg_views) as `pg_views`, `champDate` FROM `7stat` INNER JOIN `user` ON user.id=7stat.usrid WHERE champDate BETWEEN '2010-04-01' AND '2010-04-30' GROUP BY usrid ORDER BY sum(pg_views) DESC LIMIT 0, 10" );  
 
 
 
 
Il me reste encore à actualiser automatiquement la date chaque mois... j'avance lentement mais j'avance :)
 
Voila mon code terminé.
 

Code :
  1. $recup_surfer =mysql_query( "SELECT user.name as `sname`, `usrid`,  sum(pg_views) as `pg_views`, DATE_FORMAT(champDate,'%Y-%m') AS Mois FROM `7stat` INNER JOIN `user` ON user.id=7stat.usrid WHERE DATE_FORMAT(champDate,'%Y-%m-%d') BETWEEN '2010-01-01' AND '2010-12-31' GROUP BY Mois, usrid ORDER BY sum(pg_views) DESC LIMIT 0, 10" );


 
 
Le code est-il ok ?
 
Merci bcp pour toute votre aide.


Message édité par tszlachter le 16-04-2010 à 23:44:19
n°1985052
rufo
Pas me confondre avec Lycos!
Posté le 17-04-2010 à 11:27:12  profilanswer
 

heu, t'as quand même pas appelé le champ qui doit contenir la date et l'heure de visite d'une page "ChampDate" :??: J'ai donné un nom générique juste pour l'exemple... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°1985139
tszlachter
Posté le 17-04-2010 à 19:36:51  profilanswer
 

Ben on m'a dit de pas l'appeler date pour ne pas créer de soucis avec les fonctions date.
 
J'avais bien compris que tu nommais ce champ "champDate" comme exemple lol ... je suis novice mais quand meme pas bete ... héhé
 
Donc je l'ai appelé champDate, le nom importe peu du moment que je me comprends non ? ^^
 
En tout cas merci beaucoup, j'en ai beaucoup appris, et je compte encore progresser.


Message édité par tszlachter le 17-04-2010 à 19:38:50
n°1985385
rufo
Pas me confondre avec Lycos!
Posté le 19-04-2010 à 10:12:27  profilanswer
 

Faut toujours appeler un chat un chat. Donc ton nom de champ dans le BD doit avoir un sens, être représentatif de sa fonction, à quoi il sert  :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Creation Classement PHP par mois

 

Sujets relatifs
Création d'application autonome en php[BATCH] creation de repertoires par parcours de fichier texte
[PHP/MYSQL] formulaire et modification à distance de fichierCréation d'un outil de visualisation et de recherche PDF
Création d'un outil de visualisation et de recherche PDF[résolu] Nom de variable dans la variable de $_session
#'!*%@!?#!!** de saloperie de *!!#¡@* de PHP de m*@#*!Communiquer avec PHP
Passage du HTML au PHP : perte du référencement[LDAP] Changer mot de passe Active Directory via PHP
Plus de sujets relatifs à : Creation Classement PHP par mois


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR