自用户以来的时间';s最后一次使用PHP和MySQL登录


Time since user's last login using PHP and MySQL

我已经检查了这个问题(自用户上次登录以来的PHP/MySQL显示时间(,但它对我没有帮助。

我在MySQL数据库中有一个用户表。以下是用户表的字段。

uid
name
password
last_login (type = timestamp)

每当用户登录到网站last_login字段时,都会更新为当前日期时间(yyyy-mm-dd hh:mm:ss)

我能够更新last_login字段,并且它工作正常。

现在,我想展示一下现在和上次登录时间之间的区别。我尝试了SQL查询来获取详细信息,但它不起作用。这是SQL查询。

mysql_query("SELECT DATEDIFF(NOW(), last_login) FROM user where uid=1");

我试图在phpMyAdmin中检查这个查询,但它返回0。

请告诉我做错了什么。

下面是这个答案的修改版本,"如何用一个查询获取最后一小时、最后一天和最后一个月的数据?"?。

    SELECT CASE WHEN DATE_SUB(NOW() , INTERVAL 1 HOUR ) <= last_login THEN concat(TIMESTAMPDIFF(Minute, last_login, NOW()), ' Minute(s)') ELSE 0 END HOURLY, 
CASE WHEN DATE_SUB( NOW( ) , INTERVAL 1 DAY ) <= last_login THEN concat(TIMESTAMPDIFF(Hour, last_login, NOW()), ' Hour(s)') ELSE 0 
END DAILY, 
CASE WHEN DATE_SUB( NOW( ) , INTERVAL 1 MONTH ) <= last_login THEN concat(TIMESTAMPDIFF(DAY, last_login, NOW()), ' Day(s)') ELSE 0 
END MONTHLY,
CASE WHEN DATE_SUB( NOW( ) , INTERVAL 1 YEAR ) <= last_login THEN concat(TIMESTAMPDIFF(MONTH, last_login, NOW()), ' Month(s)') ELSE 0 
END YEAR
FROM users WHERE userid = 2203 or userid = 1 or userid = 1746

值为1的第一列是用户上次登录的时间。后面的列仍将验证,因为如果他们在过去一小时内登录,则他们在过去的一天内登录,等等。

我不确定这是否现在更容易阅读,它不再是一个空的/不检查。现在,它将在列中显示与上次登录时间的差异;其他较大的列(月、年等(将用单位表示0。。

"SELECT DATEDIFF(NOW(), last_login) FROM user where uid=1"    

返回0,因为用户今天已经登录(自上次登录以来的天(

您可以使用TIMESTAMPDIFF以及

"SELECT TIMEDIFF(NOW(), last_login) FROM user where uid=1"

参考:

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff