Php 如何检查用户是否连续登录天

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

任务

以了解用户是否已连续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: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。基于上面的答案,我能够使用一些代码得出一个答案。这当然不是一个容易的问题,因为人们会认为,嗯。