nombre de message par mois

Eléphant du PHP | 142 Messages

05 mai 2006, 00:16

Hello,
j'aimerais pouvoir récupéré le membre ayant le plus posté sur mon forum pendant le mois courant. Je me demandais s'il y avait moyen de faire cela avec un minimum de traitement php ( histoire de changer un peu ;) ) genre une seul requête.

donc les étapes :
On sélectionne les messages du mois ( donc supérieur à une certaine date)
On les comptes par utilisateurs
On prend les 3 premiers.

y a t'il moyen de faire cela en une requête ou bien il faux d'office passé par php, analyser et compter chaque messages?

merci

précision : c'est mysql comme base de donnée...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mai 2006, 09:21

C'est dommage, tu as fait toute la réflexion, tu as fait 90% du travail ;)

La traduction SQL de cette partie :
On sélectionne les messages du mois ( donc supérieur à une certaine date)
On les comptes par utilisateurs
On prend les 3 premiers.
est :

Code : Tout sélectionner

SELECT user_id, COUNT(*) FROM messages WHERE DATE_FORMAT(date_post, 'Y-M') = '".$annee."-".$mois."' GROUP BY user_id LIMIT 3
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 mai 2006, 09:21

Salut,

c'est sûrement possible, mais il faudrait avoir la structure de la table

A priori tu devras utiliser COUNT (pour compter les messages) et GROUP BY (pour faire le compte séparément pour chaque utilisateur)
avec une jointure entre utilisateurs et messages
une condition dans le where pour les dates
un ORDER BY et LIMIT pour le classement

voilà :D
fait des essais et montre nous si ça ne marche pas

Eléphant du PHP | 142 Messages

05 mai 2006, 10:22

merci, c'est juste que la réflexion je l'ai mais sql y a des momement ou j'ai des lacune....
je me doutait de quelque choses du genre mais je ne savais pas trop comment structurer ....

opour finir j'ai rajouter un order by...

Code : Tout sélectionner

SELECT membre_id, COUNT(*) AS count_msg_by_user FROM fsb_messages WHERE message_temps > 114669000 GROUP BY membre_id ORDER BY `message_temps` DESC LIMIT 3
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mai 2006, 10:24

euh, non, si tu veux les 3 plus gros posteurs, il faut faire un ORDER BY count_msg_by_user ;)

Mais je l'avais oublié dans mon exemple :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 142 Messages

05 mai 2006, 10:35

heu moi je veux ceux du mois en cours donc comme j'avais fait me parait bon ... et d'après mes test c'est cela ....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mai 2006, 10:42

C'est parce que ton Where n'est pas bon. Tu prends tous les message d'après une date alors qu'il faut prendre que ceux du mois courant
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 142 Messages

08 mai 2006, 00:23

merci, effectivement ...

a+