Php 如何检查用户是否连续登录天
任务 以了解用户是否已连续5天登录 样本表Php 如何检查用户是否连续登录天,php,mysql,sql,Php,Mysql,Sql,任务 以了解用户是否已连续5天登录 样本表 +----+---------+---------------------+ | id | user_id | date_logged_in | +----+---------+---------------------+ | 1 | 29 | 2019-10-25 22:00:16 | | 2 | 29 | 2019-10-26 22:00:16 | | 3 | 29 | 2019-10-27 22:00
+----+---------+---------------------+
| id | user_id | date_logged_in |
+----+---------+---------------------+
| 1 | 29 | 2019-10-25 22:00:16 |
| 2 | 29 | 2019-10-26 22:00:16 |
| 3 | 29 | 2019-10-27 22:00:16 |
| 4 | 29 | 2019-10-28 22:00:16 |
| 5 | 29 | 2019-10-29 22:00:16 |
+----+---------+---------------------+
因此,在本例中,查询将返回TRUE,因为用户#29已连续5天登录
谢谢你的帮助。这比我的工资等级高得多 在MySQL 8+中,您可以使用窗口函数:
select distinct user
from (select user, date(date_logged_in) as dli,
lead(date(date_logged_in), 4) over (partition by user order by date(date_logged_in)) as next_dli_4
from t
group by user, date(date_logged_in)
) ud
where next_dli_4 = dli + interval 4 day;
在旧版本中,可以使用相关子查询:
select distinct user
from (select t.*,
(select date(date_logged_in)
from t t2
where t2.user = t.user and
date(t2.date_logged_in) > t.date_logged_in
group by date(date_logged_in)
offset 4 limit 1
) as next_dli_4
from t
) t
where next_dli_4 = date(date_logged_in) + interval 4 day;
编辑:
另一个有趣的选择是使用加入:
select t.user, date(t4.date_logged_in)
from t join
t t4
on t4.user = t.user and
date(t4.date_logged_in) >= date(t.date_logged_in) and
date(t4.date_logged_in) <= date(t.date_logged_in) + interval 4
group by t.user, date(t.date_logged_in)
having count(distinct date(t4.date_logged_in)) = 5;
选择t.用户、日期(t4.登录日期)
从t连接
t4
在t4.user=t.user和
日期(t4.登录日期)>=日期(t.登录日期)和
日期(t4.登录日期)你在找什么?MySQL查询?PHP代码?您以前尝试过什么?如果我混淆了任何人,我很抱歉,我正在寻找SQL。基于上面的答案,我能够使用一些代码得出一个答案。这当然不是一个容易的问题,因为人们会认为,嗯。