我有一个网站,人们可以在其中记录(或记录)他们跑步的距离。我想创建一个在一个月结束后自动重置为零的排行榜。如果我也可以节省他们那个月的总距离,那将是理想的。每次跑步都与 ID 相关联,我有一个变量可以加起来每月的距离,但显然当他们记录新的跑步时会发生变化。我不知道我怎么才能让它只记录这个月,如果他们提前登录就不会吓坏了。
任何帮助,将不胜感激。
我已经尝试为 MySQL 制作每月距离值,所以每次他们记录时,如果是那个月,它会添加到它。但是我应该如何让它重置呢?
您正在跟踪每次运行的日期,对吗?然后你应该能够做这样的事情并避免存储总数:
SELECT SUM(Runs.Miles) as MonthlyTotal
FROM Runs
where MONTH(Runs.Date) = MONTH(CURDATE()) and YEAR(Runs.Date) = YEAR(CURDATE())
BETWEEN
(假设您还可以按 UserID 过滤或分组。另外,我怀疑预先计算月初和月底并在 where 子句中使用可能更有效。请咨询我们的朋友EXPLAIN
。)
如果您的读取负载太高而无法实现,您可以将每月总计存储在不同的表中,并在每次添加或更新运行时使用触发器更新它,并在每个月初通过 cron 进行更新。这种去规范化总是让事情变得更复杂,所以我避免它,直到我有理由相信它是必要的。