Как отследить это, пользователь посещал сайт каждый день в течение X дней?

Потому что в торт-бейке для подключения к базе данных используется сокет unix
, поэтому вам нужно добавить unix_socket для строки подключения.
Вы должны подтвердить местоположение, где хранится mysql.sock в WAS
Пример: в моем случае я использую xampp на MACOS 10.11
(редактировать файл Config / database.php)

public $default = array(
  ‘datasource’ => ‘Database/Mysql’,
  ‘persistent’ => false,
  ‘host’ => ‘localhost’,
  ‘login’ => ‘root’,
  ‘password’ => ‘root’,
  ‘database’ => ‘cakephp’,
  ‘encoding’ => ‘utf8’,
  ‘unix_socket’ => ‘/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock’
);

Наконец, это работа для меня!

7
задан Community 23 May 2017 в 12:19
поделиться

5 ответов

Вы также можете использовать монаду ST , которая позволяет писать императивный код, но безопасно предоставляет чисто функциональный интерфейс.

s решение, которое я считаю наиболее чистым с двумя полями даты на пользователя, в своего рода самоочевидном не объектно-ориентированном Python:

# user.beginStreak----user.lastStreak is the last interval when 
# user accessed the site continuously without breaks for more than 25h 

def onRegister (user):
    ...
    user.beginStreak = user.endStreak = time() # current time in seconds 
    ...

def onAccess (user): 
    ...
    if user.endStreak + 25*60*60 < time():
        user.beginStreak = time()
    user.endStreak = time()
    user.wootBadge = ( user.endStreak-user.beginStreak > 30*24*60*60 )
    ...

(Пожалуйста, простите мои навыки Pythonic, я академик и первый пользователь сайта)

Вы не можете выполнить эту задачу с одной переменной. Я уверен, что кто-нибудь сможет написать чистый аргумент, подтверждающий этот факт.

4
ответ дан 7 December 2019 в 05:27
поделиться

Track each visit in your database with a timestamp (which you probably already do anyway). Then create an sql statement and group the result by day, while you count the number of visits that day. In the period of the last 30 days, it's not allowed to have a 0-visit day...

1
ответ дан 7 December 2019 в 05:27
поделиться

Фактически, если посещения Участника хранятся в базе данных SQL, вы можете сделать все с помощью одного SQL-запроса. Это также, вероятно, быстрее, чем передача всех данных в клиентскую программу для проверки:

/*
    Find all members who visited at least once every day
  for 30 or more days.  --RBarryYoung, 2009-05-31
*/
;WITH
  cteVisitDays as (
    Select
      MemberID
    , DATEDIFF(dd,'2008-06-01',VisitTime) as VisitDay
     From tblMembersLog
     Where Not Exists( Select * From tblMemberTags T
    Where T.MemberID = tblMembersLog.MemberID
     And T.TagName = 'WOOT!' )
     Group By MemberID
        , DATEDIFF(dd,'2008-06-01',VisitTime)
    )
, cteVisitRunGroups as (
    Select 
      MemberID
    , VisitDay - Row_Number() Over(
            Partition By MemberID
            Order By VisitDay
        ) as RunGrouping
     From cteVisitDays
     )
SELECT Distinct
  MemberID
 From cteVistRunGroups
 Group By MemberId, RunGrouping
 Having COUNT(*) >= 30
2
ответ дан 7 December 2019 в 05:27
поделиться

Второй подход ropstah. Статистика пользователя, такая как время входа в систему и т. Д., Обычно доступна в базе данных. Нам необходимо вывести определенные факты из имеющихся данных. Поэтому вместо того, чтобы иметь счетчик для каждого посещения и приращения, я бы предпочел пакетное задание, которое запускается с данными входа пользователя и публикует результаты за этот день.

Но как только пользователь "ворвался", вы можете захотеть прекратить вычислять "woot" для этого пользователя. В противном случае существует вероятность того, что пользователь будет «ухаживать» каждый день, пока не наступит день без входа в систему. (но это второстепенная проблема).

1
ответ дан 7 December 2019 в 05:27
поделиться

Если это единственное, что вы хотите регистрировать, то, возможно, это хорошее решение. Однако мне нравится хранить логику и ведение журнала отдельно, как для увеличения объема необработанной информации в моем распоряжении, так и для обеспечения возможности настройки логики без нарушения существующих данных.

В этом случае я бы регистрировал каждое посещение или каждое посещение действие (в зависимости от требований / пространства / и т. д.), а затем напишите где-нибудь sproc или метод, который проверял данные и возвращал true (соответствует критериям для значка) или false (не соответствует критериям).

Единственный случай, когда Я бы создал специальную схему для хранения информации, как это было, если требуемые вычисления занимали слишком много времени, либо из-за количества данных, либо из-за их сложности.

0
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: