这将是一个与应用程序无关的问题,但我希望得到一个更好的答案。

跟踪用户完成挑战或目标的最佳设置是什么?类似于堆栈溢出的思考,如果您达到某个目标,您将获得一个徽章。

目前,我是网站和附加的Facebook应用程序的开发人员。我想知道跟踪已完成挑战的最佳方法。目前,我只有一行代码和实际的控制器代码混在一起,这可能不是最好的方法。类似于以下内容:

if ($upload_photo == true) {
    $challenge->perform(1);
}


如您所见,以上内容基本上触发了对perform()方法(属于Challenge类的)的调用,该方法具有数据库查找功能,以查看到目前为止是否已满足挑战阈值,如果没有,则插入记录并记下与该挑战相关的积分数。为此,数据库设置很简单,如下所示:

member_id INT
challenge_id INT


为了获得成员执行特定挑战的次数,我只运行一个COUNT (*) AS count FROM table_name WHERE member_id = ? AND challenge_id = ?查询。

但这是最好的设置吗?我认为不是,可以就如何改进此设置回答问题。

如前所述,我还负责开发与此网站关联的Facebook应用程序。将有一个进度条,该条将允许用户执行某些操作并为他们提供奖励。例如,为应用程序添加书签;喜欢该应用程序;并向其Facebook朋友推荐该应用程序。

使用Facebook的PHP SDK,我可以查询是否已完成这些操作。没问题。我的问题是用户将离开应用程序,然后在会话期满后再返回。执行动作后,是否应该将其作为记录存储在数据库表中,并且仅当用户登录到应用程序时才查询数据库?还是我应该只进行登录检查并将结果存储在会话中,从而在触发相关操作时覆盖相关会话密钥?

欢迎对此设置提出任何改进建议。提前致谢。

最佳答案

您是否正在寻找有关如何将目标存储在数据库中的建议?如果是这样,经过尝试和测试的多对多关系听起来很适合您的情况。

一个包含用户的表,一个包含目标的表以及一个包含用户已实现该目标的每个表的标识符的中间表。

我确信您知道,将数据存储在会话中的想法会在会话被销毁时丢失。您是否在乎这取决于您。如果它在数据库中,则至少可以无限期地使用它。

09-30 15:29
查看更多