(PHP - MySQL) Полоса дней - PullRequest
       11

(PHP - MySQL) Полоса дней

0 голосов
/ 07 апреля 2019

Я мог найти много вопросов и кодов о том, как это сделать, хотя ни один из них не работал так, как ожидалось.

Итак, я нашел этот запрос 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 ), это неправильно сгруппировано.

Код просто продолжает подсчитывать, независимо от того, сколько раз за один день вы работали, он будет засчитан.Таким образом, правильным способом будет считаться только один раз в день, чего не происходит.

Вот часть моей структуры временных журналов, от определенного идентификатора пользователя:

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

Вместопоказывая один день как STREAK, он показывает три , даже если используется GROUP BY entryDate .

Может кто-нибудь посоветовать совет по этому вопросу?Просто делать это с помощью кодов, а не создавать новые строки.

...