php - 跟踪成员(member)完成的挑战/目标的最佳方式?

标签 php mysql database-design coding-style

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

跟踪用户完成挑战或目标的最佳设置是什么?与 Stack Overflow 类似,如果您达到某个目标,您就会获得徽章。

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

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

如您所见,上面的代码基本上触发了对(Challenge 类的)perform() 方法的调用,该方法有一个数据库查找来查看如果到目前为止已经达到挑战阈值,如果没有,则插入一条记录并将与该挑战相关的积分记入该成员。数据库设置很简单,如下所示:

member_id INT
challenge_id INT

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

但是这是最好的设置吗?我认为不会,并且愿意接受有关如何改进此设置的答案。

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

使用 Facebook 的 PHP SDK,我可以查询这些操作是否已完成。那里没问题。我的问题是对于那些将离开应用程序,然后在 session 过期后返回的用户。执行操作后,我是否应该将其存储为数据库表中的记录,并在用户登录应用程序时查询数据库?或者我应该只在登录时进行检查并将结果存储在 session 中,当相关 session key 触发相关操作时覆盖相关 session key ?

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

最佳答案

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

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

我确信您知道,按照您将数据存储在 session 中的想法,当 session 被销毁时,这些数据将会丢失。你是否关心这个取决于你。如果它在数据库中,那么至少您可以无限期地使用它。

关于php - 跟踪成员(member)完成的挑战/目标的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3387545/

相关文章:

mysql - WHERE 子句中的操作 AND OR

php - Laravel 从查询构建器获取特定列

mysql - 如何确定是否可以从 impressions 表中删除某些索引

用于股票信息的 MySQL 表设置

database - wiki 示例中的 3nf 函数依赖

php - 通过不返回 media_url 的 twitter API 调用获取用户推文

php - sql - 为特定州服务的公司

php - OOP:您将如何在 OOP 中建立艺术家、专辑和歌曲关系

php - 哪里不存在mysql

database - 有什么想法可以比较两个 SQL DDL 并在保留数据库数据的情况下创建更改/删除/创建脚本吗?