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