2012-02-20 80 views
2

通常计算用户登录系统的天数(如stackexchange)。在普通用户表,我更新登录信息Mysql查询计算登录天数

UPDATE users SET 
last_login='date', number_of_login=number_of_login + 1, number_of_days=? 
WHERE user_id='user_id' 

其中LAST_DATE为datetime

什么是最好的检查当天是last_login不同与number_of_day=number_of_day+1更新的天数。

我心里有两个方法,但他们似乎是天真:

方法1:具有SELECT赶上LAST_LOGIN并与当天在PHP

比较

方法2:使用类似伎俩子选择

我希望用一个简单的查询(如果可能)做到这一点。

回答

1

所以,如果我没有得到你的评论错了,你要时常更新LAST_LOGIN,但NUMBER_OF_DAYS只有LAST_LOGIN!= CURDATE()。试试这个:

UPDATE users SET 
number_of_days = if (last_login = curdate(), number_of_days, number_of_days + 1), 
last_login='date', number_of_login = number_of_login + 1 
WHERE user_id='user_id' 
+0

WHERE子句将停止整个更新;但无论如何我们都需要记录last_login(无论这是今天的第一次登录还是多次登录) – Googlebot 2012-02-20 11:35:47

+0

好的,我已经更新了我的答案。让我知道如果这次我得到它的权利:) – 2012-02-20 11:46:05

+0

感谢您的更新。这正是我的意思:) – Googlebot 2012-02-20 11:48:00