每小时积分为用户添加php和mysql解决方案


Hourly points add to users php and mysql solution?

在我正在处理的网站中,我需要添加用户点。每个用户都有自己的积分,最大积分为 200。注册后,用户可获得100积分。对于各种任务,用户积分将被扣除。

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

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

但是在阅读了一些之后,我想到了我不太完全理解的不同方法。更好的方法,更少的服务器资源消耗是运行一个功能,该功能将在每次用户登录时检查他有多少点,并为他添加适当数量的点。问题是我不知道如何设置它,如何计算如果他离线(例如 8 小时)要向用户添加多少点以及如何计时?甚至可能将 ajax 与计时器一起使用?

您对此有何建议和方法?

编辑:只是为了添加,因为您问,用户看不到彼此的点。

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

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

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

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

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。

,从 mysql 5.1 开始,有一个简洁的功能,基本上是 mysql cron 称为 MySQL 事件调度程序,我认为现在不适合它,因为 cron 脚本将非常容易编写,小且不耗时。

我需要做的就是写

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

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