我想在基于社区的网站上为用户保留一些成就。 我们的想法是连续5天记录成本,或者每个周末记录一个月。
我也会为获得100个帖子取得成就,但这很容易确定。我刚才给出的基于时间的例子有点困难。
如何制作某种通用系统来统计每个用户的这些指标?或者我最终会得到一个包含" every_weekend_for_month"等字段的大表格。和" 5_days_in_a_row"一旦这些整数达到4和5,它们就已经实现了#39;但是,对于这两个领域,我也必须保持上周末/天的得分。
答案 0 :(得分:1)
您需要跟踪获得成就所需的所有数据(甚至部分数据)。
对于登录的成就,您需要每天跟踪一次登录,其中包含以下表格:
user_id | login
1 | 2013-07-20
1 | 2013-07-19
1 | 2013-07-16
2 | 2013-07-20
...
每当触发跟踪事件时,您还会检查成就。
event onLogin {
// get the last 4 logins before the current login
statement = (
SELECT login FROM tracking_user_login
WHERE user_id = 1
ORDER BY login DESC
LIMIT 1,4
);
statement.execute();
// did the user even login at least 4 times already?
if (statement.rowCount == 4) {
date lastLogin = todaysLogin;
int consecutiveLogins = 1;
// iterate descending through the last days
foreach (row in statement) {
if (row.login == (lastLogin - 1day)) {
consecutiveLogins++; // increment consecution
lastLogin = (lastLogin - 1day); // prepare next comparison
} else {
// consecution interrupted, ignore the rest
break;
}
}
// enough to achieve something?
if (consecutiveLogins >= 5) {
user.addAchievement('5 CONSECUTIVE LOGINS');
}
}
}
您基本上可以在此活动中添加所有围绕登录的成就。
答案 1 :(得分:1)
您可以跟踪所有登录并使用该数据来推断成就。跟踪和搜索单个登录可能会更慢。如果您拥有非常大的用户群和大量登录,那么在登录时进行这些计数可能并非易事。
如果你想加快速度,你可以追踪特定成就的最后登录日期,然后增加一个听起来像你在想的计数器。