mysql统计登录次数或者在线时长

自然周内有3天登陆行为,或累计在线时长达到8小时以上
列名有lastLoginTime(登录时间),lastLogoutTime(退出时间)。这个东西怎么写啊?求大侠拔刀相助!!

5个回答

自然周内有3天登陆行为,或累计在线时长达到8小时以上
如果lastLoginTime(登录时间),lastLogoutTime(退出时间)这两个字段是在登录日志表中,那么查询sql为:
1.自然周内有三天登录行为的:
[code="java"]
select weekNo,count(1) from (
SELECT *,WEEK(lastLoginTime) weekNo FROM login_history
) t group by t.weekNo having count(1) > 3

[/code]

2.累计8小时:
[code="java"]
SELECT * FROM login_history WHERE TIMESTAMPDIFF(HOUR,lastLoginTime,lastLogoutTime) > 8
[/code]

如果不存在登录日志表,那么这两个字段根本没什么用处,仅仅知道上次登录时间、退出时间。

只有lastLoginTime(登录时间),lastLogoutTime(退出时间)?last是最后的意思,如果只有一条最后的登录,推出时间,根本做不了的。

是每天都可能有一条LoginTime(登录时间),LogoutTime(退出时间),或者有多条才好查询啊。

bqmcjl
无敌小贱 这数据也就是那个条件,只不过设计数据库的脑袋抽了。就是这两个条件
7 年多之前 回复

1、自然周内有3天登陆行为: 这个建议去分析登录日志 而不是在程序中完成 比如 每天晚上去分析登录日志(记数据库性能差)

2、或累计在线时长达到8小时以上
2.1、是一次累计长达8小时
2.2、还是总共累计长达8小时

如果是2.1
则可以根据lastLogoutTime - lastLoginTime 获取

如果是2.2
你的需求 在我的这个项目中是有的

我的实现思路是每5分钟记录一下上次访问时间并在总的在线时间上+5分钟

可以参考下
userOnlineService.online(UserOnline.fromOnlineSession(session));

[url]https://github.com/zhangkaitao/es/blob/master/web/src/main/java/org/apache/shiro/session/mgt/eis/OnlineSessionDAO.java[/url]

jinnianshilongnian
jinnianshilongnian 这数据也就是那个条件,只不过设计数据库的脑袋抽了。就是这两个条件 这种东西应该使用日志 而不是记录数据库 因为 就是个分析作用
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 就是用户登录退出 都记下日志 然后呢 每个周末分析上周的用户 你说的其实就是活跃用户
7 年多之前 回复
bqmcjl
无敌小贱 您所说的分析登录日志是怎么分析啊?
7 年多之前 回复

我假设

  1. 表里有多条登录,退出时间
  2. 登陆行为按lastLoginTime计算
  3. 不考虑跨周的特殊例子——比如周末登陆后,一直使用到下周一才退出。这种还是按登陆时间计算

sql如下,参考下吧。
[code="sql"]
SELECT
userid, 登录的自然周
FROM
(
SELECT
userid,
UNIX_TIMESTAMP(lastLogoutTime)-UNIX_TIMESTAMP(lastLoginTime) AS 每次在线时间,
WEEK(lastLoginTime) AS 登录的自然周
FROM
mytable
)
t
GROUP BY
userid, 登录的自然周
HAVING
(
SUM(每次在线时间)>8*3600*1000 OR COUNT(1) >= 3
)
[/code]
未测试

自然周内有3天登陆行为,或累计在线时长达到8小时以上
列名有lastLoginTime(登录时间),lastLogoutTime(退出时间)

退出时间减去登陆时间 计算下,不就得出了本次的在线时间了嘛?》

下次登陆的时候,再读取上次的登陆时间这样累加不就OK了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐