每小时点添加到用户php和mysql解决方案?

时间:2013-10-15 13:06:47

标签: php mysql time

在我工作的网站上我需要添加用户点。每个用户都拥有自己的积分,最大积分将为200.注册后,用户获得100积分。通过各种任务,将扣除用户点数。

但是我遇到的主要问题是如何向用户添加积分,因为每个用户每小时需要获得1分,除非他有200分或更多积分。

我的第一个想法是做一个cronjob,每小时运行一个脚本,检查用户是否已经过验证,用户是否少于200分,并为每个用户增加1分。

但经过一些阅读后,我正在思考不同的方法,我完全不明白。更好的方法,更少的服务器资源消耗将是运行一个函数,该函数将在每次用户登录他有多少点时检查并向他添加适当数量的点。问题是我不知道如何设置它,如何计算添加到用户的数量,如果他离线8小时以及如何计时?或者甚至可以在计时器上使用ajax?

您的建议和方法是什么?

编辑:只需添加,因为您要求,用户不会看到彼此的分数。

4 个答案:

答案 0 :(得分:5)

当用户执行某些操作时,请检查您上次给他们分数的时间。如果是5个小时前,给他们5分。如果是10个小时前,给他们10分。等等。实施缓存,以便用户在一小时内访问您的网站50次,您不必每次都检查数据库。

无论如何,简短的回答是,在加载用户数据时进行检查,而不是每小时自动检查所有用户是否处于活动状态。

答案 1 :(得分:2)

UPDATE users
SET points = MIN(points + 1, 200)

我真的没有看到这个脚本作为cron运行的问题。如果您将每个事件作为事务点处理会更有问题,因为您必须运行类似:

# Generates a row each hour per uncapped user, which may become a lot
INSERT INTO transcations (points, type, created)
SELECT 1, 'HOURLY_INCOME', NOW()
FROM users
WHERE points < 200

是否与其他用户或官方/官方统计信息相关,以检查他们的当前点是什么?这非常相关,因为如果它只在登录时更新,它将无法完全运行。

答案 2 :(得分:0)

user_table
---------------
id  |  reg_date
1   |  2013-10-10 21:10:15
2   |  2013-10-11 05:56:32

只需查看用户注册后剩余的小时数,即可添加100分:

SELECT
   TIMESTAMPDIFF(HOUR, `reg_date`, NOW())+100 AS `p`
FROM
    user_table
WHERE
    id = 1

然后检查PHP,如果结果超过200只显示200。

答案 3 :(得分:0)

嗯,从mysql 5.1有一个很好的功能,基本上是mysql cron,叫做MySQL事件调度程序,我认为现在不适用,因为cron脚本很容易编写,小而且不耗时。

我需要做的就是写

UPDATE users SET points = (points +1) WHERE points<200 

并将其添加到每小时重复出现的mysql事件中。