Voici un code php permettant d'afficher un top 10 des actifs des membres de mon forum par ordre décroissant proportionnellement a leur inscription (taux en msg/jour)
Juste un souci, la syntaxe pour déclaré "au moment ou on lit la stat" n'est pas précise puisque c'est "aujourd'hui" tout court c'est a dire aujourd'hui a minuit donc cela faut les résultat puisque (je prend un exemple simple pour que vous puissiez comprendre) :
Un membre qui s'inscrit le 15/01/2009 a 22H et a 2 messages
Si on regard les statistiques le 16/01/2009 a 22H logiquement il devrai être a 2 msg/j de moyenne or il indiquera 24 msg/jour de moyenne du fait que la statistique considère que la date au moment ou on lira la stat n'est pas le 16/01/2009 a 22h mais le 16/01/2009 a minuit (le matin)
Donc cela change tout puisque entre 22h et minuit ça fait un écart de 2h donc 1 msg par heure en moyenne soit 24 msg par jour de moyenne alors qu'en réalité quand on regarde la stat c'est 2 msg/jour de moyenne.
Autre souci a cause de la déclaration de "maintenant" : si un membre s'inscrit après minuit, il est a 0 msg/heure si on regarde la stat le même jour et cela quelque soit le nombre de message qu'il postera (normale puisque ça s'arrète minuit)
Malgré avoir essayé pleins de choses y compris en regardant cet aide : http://www.toutestfacile.com/sql/cours_imprimables/SQLFacile.com-functdate.php5
impossible d'arriver a déclarer l'instant présent.
Voici le code de la mod':
<?php
//Choix de la période (jour, semaine, mois)
$periode = "jour";
switch($periode) {
case "jour" :
$interval = 86400;
break;
case "semaine" :
$interval = 86400 * 7;
break;
case "mois" :
$interval = 86400 * 30;
break;
default :
$interval = 86400;
$periode = "jour";
}
$sql = "SELECT u.id,u.username,
ROUND((u.num_posts/((Unix_Timestamp(CURRENT_DATE()
) - u.registered)/".$interval.")),6) AS Moyenne FROM ".$db->prefix."users AS u ORDER BY Moyenne DESC LIMIT 10";
$result = $db->query($sql)or error ('Erreur récupération Moyenne des posts', __FILE__, __LINE__, $db->error());
echo "<p><strong>Top 10 posteurs</strong><small><i> (Moyenne par ".$periode.")</i></small> : ";
while($top10_membre = $db->fetch_assoc($result)) echo '<a href="profile.php?id='. $top10_membre['id'] .'">'. $top10_membre['username'] .'</a> (<i>'. $top10_membre['Moyenne'] .'</i>), ';
?>
Dites moi svp par quoi je dois remplacer :
((Unix_Timestamp(CURRENT_DATE()))