(PHP-MySQL)连胜天数

时间:2019-04-06 22:07:11

标签: mysql datediff

我可以找到很多有关如何执行此操作的问题和代码,尽管它们均未达到预期的效果。

因此,我找到了这个MySQL查询,该查询与我要查找的查询更接近,并且将其调整为我的数据库:

// STREAK DAYS
    $querystreak = "SELECT MAX(streak) AS streak
FROM (
  SELECT timeId, userId, entryDate,
         DATEDIFF(NOW(), entryDate),
         @streak := IF( (DATEDIFF(NOW(), entryDate) - @days_diff) > 1, @streak, 
                       IF(@days_diff := DATEDIFF(NOW(), entryDate), @streak+1, @streak+1))  AS streak                                        
  FROM timelogs
  CROSS JOIN (SELECT @streak := 0, @days_diff := -1) AS vars 
  WHERE userId = ".$tz_userId." AND timelogs.entryDate <= NOW()
  GROUP BY entryDate ORDER BY entryDate DESC) AS t";
    $streakresult = $mysqli->query($querystreak);

这是问题所在:即使我使用了MYSQL GROUP BY语句( GROUP BY entryDate ),也很困难,但这并不是以正确的方式进行分组。

代码只会不断计数,无论您一天中登录多少次,它都会被计数。因此,正确的方法是每天只计数一次,这不会发生。

这是我的时间日志结构的一部分,来自特定的用户ID:

timeId  | userId | entryDate  
-----------------------------
415     | 1      | 2019-03-18 
403     | 1      | 2019-03-18
402     | 1      | 2019-03-18

即使使用 GROUP BY entryDate ,也不会显示一天作为STREAK,而是显示

有人可以请教这个问题吗?只需通过代码即可完成操作,而不创建新行。

0 个答案:

没有答案