Creation Classement PHP par mois - PHP - Programmation
Marsh Posté le 15-04-2010 à 14:24:36
Salut,
Est ce que tu pourrais ajouter le code lorsque tu insère des données ans ta table ?
Marsh Posté le 15-04-2010 à 14:31:35
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.
Marsh Posté le 15-04-2010 à 14:41:03
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)
Marsh Posté le 15-04-2010 à 14:49:54
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`
Marsh Posté le 15-04-2010 à 15:22:45
Par conter il faut que ton champ 'DATETIME' soit bien renseigné, tu nous avais dis qu'il était tout le temps à 0000
Marsh Posté le 16-04-2010 à 10:16:53
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 :
|
---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 :
|
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
Marsh Posté le 16-04-2010 à 12:20:51
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 :
|
C'est BEAUCOUP plus lisible, à terme quand il faut maintenir tu gagnes pas mal de temps.
Marsh Posté le 16-04-2010 à 13:49:04
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
Marsh Posté le 16-04-2010 à 13:53:22
Si on commence comme ça, faut faire un topo sur la nomenclature des bases de données
Marsh Posté le 16-04-2010 à 14:21:38
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 ... ) 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 :
|
Marsh Posté le 16-04-2010 à 15:06:02
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.
Marsh Posté le 16-04-2010 à 23:12:28
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 :
|
Le code est-il ok ?
Merci bcp pour toute votre aide.
Marsh Posté le 17-04-2010 à 11:27:12
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...
Marsh Posté le 17-04-2010 à 19:36:51
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.
Marsh Posté le 19-04-2010 à 10:12:27
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
Marsh Posté le 15-04-2010 à 14:16:23
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:
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 ?