Page 1 sur 1

nombre de message par mois

Posté : 05 mai 2006, 00:16
par Grummfy
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...

Posté : 05 mai 2006, 09:21
par zeus
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

Posté : 05 mai 2006, 09:21
par ouckileou
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

Posté : 05 mai 2006, 10:22
par Grummfy
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

Posté : 05 mai 2006, 10:24
par zeus
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:

Posté : 05 mai 2006, 10:35
par Grummfy
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 ....

Posté : 05 mai 2006, 10:42
par zeus
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

Posté : 08 mai 2006, 00:23
par Grummfy
merci, effectivement ...

a+