首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每天给用户一个积分

每天给用户一个积分
EN

Stack Overflow用户
提问于 2010-09-03 19:05:46
回答 2查看 270关注 0票数 5

使用PHP/mySQL,用户每天都可以获得一个指向其成员帐户的整数点。我将使用这些数据来确定是否应该授予一个点:创建日期(时间戳)和 Login (UNIX )。

授予这些点的过程是在用户登录时确定的。我的问题是,自上次登录以来,确定已经过去了多少天的最有效的方法是什么?第二,如果用户每天登录,我如何确定是否已经过去了24小时,并授予了一个点?过去的日子等于给出的点数(每天1点)。

目前,我正在使用以下代码:

代码语言:javascript
复制
/*
** Updates Points based on days since last visit
*/
static function UpdatePoints($username)
{
    $getlog = System::$mySQL->Select("lastLog, creation FROM users WHERE username='$username'");
    $log = System::$mySQL->Fetch($getlog);

    $offset = (TIME() - $log['lastLog']) / 86400;  // 24hrs
    $lastlog = round($offset); // in days

    if($lastlog > 0)
    {
        System::$mySQL->Update("users SET points=points+".$lastlog." WHERE username='$username'");
    }
}

撇开标记不说,很明显,我的代码是短视的。如果用户每天登录一次,他们就得不到一分。因此,我还必须使用创建日期字段来确定正确的方法。我今天没法把头绕着,有什么建议吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-03 19:12:51

这比PHP更适合数据库。添加具有唯一索引users_points的表(user_id,login_date)。样本数据:

代码语言:javascript
复制
 user_id | login_date
====================== 
 19746   | 2010-09-02
 19746   | 2010-09-03

然后在每次登录时,标记用户已在该日期登录(如果该行已经存在,则索引将防止重复):

代码语言:javascript
复制
INSERT IGNORE INTO `users_points` (`user_id`,`login_date`) VALUES (19746,CURDATE())

为了得到分数的多少:

代码语言:javascript
复制
SELECT COUNT(*) FROM `users_points` WHERE `user_id` = 19746

这也是很好的,您有一个列表的日子,当用户已经登录,以防您改变了标准,并想要做一个重新计数。

user_id是一个INT,login_date是一个DATE,有一个可用的索引,所以插入和选择都应该是快速的,即使有大量的用户,表也会相对较小。

如果您坚持将用户评分存储在某个地方(或者您可能希望与其他用户数据一起检索它),您可以在登录时这样做:

运行insert ignore

  • run select count

  • save select count

  • save表users.

列中的结果

票数 3
EN

Stack Overflow用户

发布于 2010-09-03 19:10:49

使用单独的字段来保存将点添加到用户帐户时的日期。如果今天没有发生这种情况--添加一个点(或几个)并更新一个字段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3638780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档