2013-05-07 6 views
0

J'ai un site Web où les gens enregistrent (ou enregistrent) la distance de leurs courses. Je veux créer un tableau de classement qui sera automatiquement remis à zéro après la fin du mois. Si je pouvais aussi économiser leur distance totale pour ce mois, ce serait idéal. Chaque exécution est liée à des identifiants et j'ai une variable qui additionne la distance mensuelle, mais évidemment quand ils enregistrent une nouvelle exécution qui change. Je ne sais pas comment je pourrais faire enregistrer ce mois-ci seulement et ne paniquer pas s'ils se connectent à l'avance.Traitement des occurrences mensuelles avec PHP

Toute aide serait appréciée.

J'ai essayé d'établir une valeur de distance mensuelle pour MySQL, donc chaque fois qu'ils se connectent, si c'est ce mois-là, il va y ajouter. Mais comment devrais-je le faire réinitialiser?

+0

Créer un événement? – hjpotter92

Répondre

2

Vous suivez la date de chaque course, n'est-ce pas? Ensuite, vous devriez être en mesure de faire quelque chose comme ça et éviter d'avoir à stocker les totaux.

SELECT SUM(Runs.Miles) as MonthlyTotal 
FROM Runs 
where MONTH(Runs.Date) = MONTH(CURDATE()) and YEAR(Runs.Date) = YEAR(CURDATE()) 

(On peut supposer que vous souhaitez également filtrer par groupe ou par le UserID Aussi, je pense qu'il peut être plus efficace d'effectuer une pré -calculer le début et la fin du mois et utiliser BETWEEN dans la clause where.Consultez notre ami EXPLAIN.)

Si votre charge de lecture est trop élevée pour rendre cela pratique, vous pouvez stocker le total mensuel dans un tableau différent et le mettre à jour avec un déclencheur chaque fois qu'une exécution est ajoutée ou mise à jour, et via cron au début de chaque mois. Ce genre de dénormalisation rend toujours les choses plus compliquées, donc je l'évite jusqu'à ce que j'ai des raisons de croire que c'est nécessaire.

Questions connexes