Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跟踪成员完成的挑战/目标的最佳方式?_Php_Mysql_Database Design_Coding Style - Fatal编程技术网

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

Php 跟踪成员完成的挑战/目标的最佳方式?,php,mysql,database-design,coding-style,Php,Mysql,Database Design,Coding Style,这是一个与应用程序无关的问题,但我想得到一个更好的答案 跟踪用户完成挑战或目标的最佳设置是什么?类似于堆栈溢出,如果你击中某个目标,你将获得一枚徽章 目前,我是一个网站和附加Facebook应用程序的开发者。我想知道跟踪已完成挑战的最佳方法。目前,我有一行代码和实际的控制器代码,这可能不是最好的方法。如下所示: if ($upload_photo == true) { $challenge->perform(1); } 如您所见,上面的代码基本上触发了对perform()方法(属

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

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

目前,我是一个网站和附加Facebook应用程序的开发者。我想知道跟踪已完成挑战的最佳方法。目前,我有一行代码和实际的控制器代码,这可能不是最好的方法。如下所示:

if ($upload_photo == true) {
    $challenge->perform(1);
}
如您所见,上面的代码基本上触发了对
perform()
方法(属于
Challenge
类)的调用,该方法有一个数据库查找,以查看到目前为止是否满足了质询阈值,如果没有,则插入一条记录并将与该质询相关的点数计入成员。这方面的数据库设置很简单,如下所示:

member_id INT
challenge_id INT
为了获得一个成员执行特定质询的次数,我只需运行一个
COUNT(*)作为表\u name中的COUNT,其中member\u id=?和质询_id=?
query

但这是最好的设置吗?我不这么认为,并对如何改进这种设置持开放态度

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

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


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

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

一个包含用户的表、一个包含目标的表和一个中间表,中间表包含用户实现该目标的每个表的标识符


我相信您已经意识到,在会话中存储数据的想法会在会话被破坏时丢失这些数据。你是否在乎这取决于你自己。如果它在数据库中,那么至少您可以无限期地使用它。

多对多设置是我目前拥有的。我的问题更多的是,在我的代码中(在MVC设置中)哪一个地方最适合检查挑战是否完成?目前这是在我的控制器,不是很抽象。每次创建质询时,我都必须编写一个新的
case
语句,并将其插入到代码中的正确位置。“在我的代码中,哪里最适合检查质询是否已完成?”--或者a)无论在何处存在业务逻辑,以执行可跟踪的操作,或者B)在cron脚本/异步操作中,明确地专用于寻找可奖励的条件。在大多数情况下,“A”答案将对应于您的模型,这是业务逻辑“应该”存在的地方。情况并非总是如此。。。。