代码之家  ›  专栏  ›  技术社区  ›  Martin Bean

跟踪成员完成的挑战/目标的最佳方法?

  •  0
  • Martin Bean  · 技术社区  · 14 年前

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

    跟踪用户完成挑战或目标的最佳设置是什么?类似于堆栈溢出,如果你击中了某个目标,就会获得一个徽章。

    目前,我是一个网站和附加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,我可以查询这些操作是否已经完成。没问题。我的问题出现在将离开应用程序,然后在会话过期后返回的用户身上。当一个操作被执行时,我应该将它作为一个记录存储在数据库表中,并在用户登录到应用程序时查询数据库吗?或者我应该在登录时进行检查,并将结果存储在会话中,在触发relavant操作时覆盖relavant会话键吗?

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Evernoob    14 年前

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

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

    我确信您知道,如果您想在会话中存储数据,那么当会话被破坏时,这些数据将丢失。你是否关心这件事取决于你自己。如果它在数据库中,那么至少您可以无限期地使用它。