Kynerion
mercredi 5 avril 2006 à 07:39
Oui, merci, c'est également efficace. Maintenant je vais vraiment dévoiler le but de cette sélection parce que :
1. ça pourra resservir à d'autres
2. l'équation se révèle beaucoup plus compliquée que prévue ^_^
En effet, le but est de créer manuellement un classement des "meilleurs sujets du moment" d'un forum. Je précise "à la main" parce qu'il existe des mods de statistiques pour les forums, mais c'est plus gratifiant de le faire soi-même (et ça ne touche pas aux fichiers).
Le problème est donc de trouver l'équation MySQL qui permet de sélectionner ces sujets, selon 4 critères numériques contenus dans la table "sujets":
- la date de lancement du sujet, en timestamp
- la date du dernier message dans ce sujet, également en timestamp
- le nombre de lectures du sujet
- le nombre de messages du sujet
A partir de là je fais une première sélection puisque je ne prends que les sujets qui ont reçu une réponse dans le mois, à l'aide d'un:
SQL
WHERE dernier_message > ".(time()-60*60*24*30)."
L'idéal du sujet "super vivant", c'est donc un sujet lancé récemment (donc timestamp élevé du lancement), avec de nombreuses lectures et de nombreuses réponses (donc un quotient "lectures/réponses" faible).
J'ai tenté plusieurs choses:
SQL
ORDER BY ((lancement*1)/(lectures*1/réponses*1)) DESC
Mais pas satisfaisant : ça me mettait de très vieux sujets (donc très lus et très "répondus") qui ont juste reçu une réponse ce mois-ci.
Alors j'ai essayé de compliquer un peu la choses en rajoutant un facteur temps (la différence entre la date du dernier message et celle du lancement du sujet, qui doit être faible):
SQL
ORDER BY (((lancement*1)/(lectures*1/réponses*1))/(dernier_message*1-lancement*1)) DESC
Là encore ça mettait comme grand vainqueur un nouveau sujet lancé ce mois-ci, qui a reçu deux réponses très vite en début de mois et depuis plus rien.
Je sens que je me rapproche, mais il me manque un matheux...

EDIT : quelques corrections. Peut-être déjà inverser le quotient : "lectures/réponses" devient "réponses/lectures", donc le meilleur sujet sera celui dont ce quotient se rapproche de 1.
Ensuite prendre en compte la date du moment (
time())avec :
- une faible différence entre la date actuelle et celle du dernier message
- une faible différence entre la date actuelle et celle du lancement du sujet
Enfin, autre(s) critère(s) :
- pour éviter les vieux sujets qui ressuscitent par une seule réponse, il faut un quotient faible entre le nombre de réponses ET la différence entre la date actuelle et celle du lancement du sujet
désolé si je complique, je me sers de ce sujet pour prendre des notes et améliorer l'équation.