1

我正在制作一个健身日志,室内划船者可以在那里记录结果。为了让它变得有趣和激励,我正在实施一个成就系统。我喜欢有一个成就,如果有人在 24 周内划船超过 90 次,他们就会获得该成就。

是否有人对我如何在 MYSQL 中实现这一点有一些提示。日志的 mysql 表非常简单:id、用户 ID、日期(时间戳)等(省略其余部分,因为它并不重要)

要点是第一个行日期和最后一个行日期不能超过 24 周。

4

4 回答 4

1

我从您的申请中假设您想要最近的 24 周。

在 mysql 中,您可以这样做:

select lb.userid
from logbook lb
where datediff(now(), lb.date) >= 7*24
group by userid
having count(*) >= 90

如果您在任意 24 周内需要它,您可以修改问题吗?

于 2012-07-21T17:58:52.797 回答
0

只需执行 sql 查询来计算用户从现在到 24 周前的行数。这是一个非常直接的查询。

看看在 mysql 中使用一些东西datediff来获得现在和 24 周前之间的差异。

在你设置了一个脚本来执行此操作后,设置一个 cron 作业以每天或每周运行并对此进行一些自动化。

于 2012-07-21T17:57:53.420 回答
0

我认为您应该创建一个表格成就者,并在其中填充每天的成就者。您可以设置一个经常性(每天,在午夜之前)事件,您可以在其中运行如下查询:

 delete from achievers;

 insert into achievers (
 select userid
 from logbook
 where  date < currenttimestamp and date > currenttimestamp - 24weeks
 group by userid 
 having count(*) >= 90
 )

对于 mysql 中的事件:http: //dev.mysql.com/doc/refman/5.1/en/events-overview.html

于 2012-07-21T18:03:29.627 回答
0

此查询将为您提供 24 周内的用户总活动列表

   select * from table groupby userid where  `date` BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 168 DAY ) AND CURDATE( ) having count(id) >= 90
于 2012-07-21T18:04:59.093 回答