我可以找到很多有关如何执行此操作的问题和代码,尽管它们均未达到预期的效果。
因此,我找到了这个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,而是显示三。
有人可以请教这个问题吗?只需通过代码即可完成操作,而不创建新行。