如何获取近半个月没有活跃的用户?
用户表 user 主键id
用户活跃日志表 user_active_log 外键user_id 字段活跃时间active_time
问题是:
如果查询近半个月没有活跃的用户呢?
当筛选出最近半个月内没有活跃的用户,我们将发送激活短信。只激活三次 三次之后还是没有活跃 将放弃。每次激活间隔时间为半个月。这个又将如何应对?
SELECT user.id, user.name, user.email FROM user LEFT JOIN user_active_log ON user.id = user_active_log.user_id WHERE user_active_log.active_time < DATE_SUB(NOW(), INTERVAL 15 DAY)
select * from user where not exists(select 1 from user_active_log where user_active_log.user_id = user.id and unix_timestamp(user_active_log.active_time) > unix_timestamp() - 15 * 86400)
SELECT u.id as '用户id', u.username as '用户名', u.email as '邮箱', MAX(ul.active_time) as '最后一次活跃时间' FROM user u LEFT JOIN user_active_log ul ON u.id = ul.user_id WHERE ul.active_time <= DATE_SUB(CURDATE(), INTERVAL 14 DAY) GROUP BY u.id HAVING COUNT(ul.user_id) = 0;
如果有激活三次的限制,感觉可以直接在user上加一个激活次数吧,激活次数默认1,发送一次加1,只要活跃了则把这个活跃数重置为1,然后,筛选不活跃用户时加上激活次数不等于5就可以了
以最后登陆日期来查询数据, 晚上 12 点过后查询,并发送激活邮件
建议在 users 表加一个 active_time 字段,登陆就更新,这样查询很方便,也是比较快的。
只激活三次 三次之后还是没有活跃 将放弃。 这是个伪需求吧?
查询 15/30/45 天前当天登陆过用户,并发生激活通知,在早的就不需要了。这个放到任务计划中就行了。
sql上函数会使索引失效,还是尽量加字段从业务上解决
可以将每日活跃用户id存入位图中,每日一个位图。查询最近半个月的活跃用户,就是查询十五个位图做或运算。将用户id取出来。
上面这一步,只能获取活跃用户。在用户注册时,也维护一个位图,存储着所有用户的id。最后做一个与运算,筛选出来的就是不活跃的用户了。
这是一个利用位图非常典型的案例。希望对你有帮助哦。
这个简单,我来:
只考虑查出结果的话,就是这样了,最简单的一个sql