2013-08-05 4 views
0

커뮤니티 기반 웹 사이트에서 사용자를 위해 일종의 업적을 계산하고 싶습니다. 아이디어는 연속해서 5 일 동안 로그인하거나 1 주일에 한 번 한 달에 한 번씩 업적을 달성하는 것입니다.시간을 기준으로 사용자 통계 유지하기

나는 또한 100 개의 게시물을 얻는 데 대한 성과를 얻지 만 결정하기 쉽습니다. 방금 전한 시간 기반 예제는 생각보다 조금 어렵습니다.

사용자 당 메트릭 수를 유지하기 위해 일종의 일반 시스템을 만들 수 있습니까? 아니면 "every_weekend_for_month"및 "5_days_in_a_row"와 같은 필드가있는 큰 테이블로 끝나고 그 정수가 4와 5에 도달하면 '달성되었습니다'. 하지만 두 분야 모두 마지막 주말/일 점수를 유지해야합니다.

+1

개별 메트릭 수준에서 왜 이런 종류의 것을 추적합니까? 왜 각 로그인 시간을 저장 한 다음 일종의 일정 (또는 각 로그인 등)에 저장하면 보너스 수준에 도달했는지 확인하십시오. 그런 다음 연관 테이블을 사용하여 사용자에게 성취도를 부여하십시오. – Brad

답변

1

업적을 달성하려면 (부분적으로) 필요한 모든 데이터를 추적해야합니다. 추적 이벤트가 트리거 될 때마다

user_id | login 

1 | 2013-07-20 
1 | 2013-07-19 
1 | 2013-07-16 
2 | 2013-07-20 
... 

, 당신은 또한 성과를 확인 : 로그인 주변의 업적

, 당신은 같은 테이블을 가지고, 하루에 한 번 각 로그인을 추적 할 필요가있다.

event onLogin { 

    // get the last 4 logins before the current login 
    statement = (
     SELECT login FROM tracking_user_login 
     WHERE user_id = 1 
     ORDER BY login DESC 
     LIMIT 1,4 
    ); 
    statement.execute(); 

    // did the user even login at least 4 times already? 
    if (statement.rowCount == 4) { 

     date lastLogin = todaysLogin; 
     int consecutiveLogins = 1; 

     // iterate descending through the last days 
     foreach (row in statement) { 

      if (row.login == (lastLogin - 1day)) { 
       consecutiveLogins++; // increment consecution 
       lastLogin = (lastLogin - 1day); // prepare next comparison 
      } else { 
       // consecution interrupted, ignore the rest 
       break; 
      } 
     } 

     // enough to achieve something? 
     if (consecutiveLogins >= 5) { 
      user.addAchievement('5 CONSECUTIVE LOGINS'); 
     } 
    } 

} 

기본적으로 로그인 할 때 모든 업적을이 이벤트에 추가 할 수 있습니다.

+0

아마도 더 나은 방법은 공간을 절약하기 위해 방금 입력 한 마지막 로그인 및 연속 로그인 일 (사용자의 전체 로그인 기록을 유지하는 데 실제로 신경 쓰지 않는 경우)을 계산하는 두 가지 추가 열을 사용자 테이블에 두는 것입니다. – bengoesboom

+0

그러나 이것은 성취 가능성을 제한 할 것입니다. 그는 이미 주말에 계속해서 성행을 점검 할 것이라고 언급했다. 그리고이 경우 어쨌든 프로세싱 로직을 추가해야합니다. – Alex

+0

물론 데이터를 적게 기록하면 가능성이 제한됩니다. 내가 말한 전부는 OP가 묘사하는 것이 훨씬 더 확장 가능한 방식으로 가능하다는 것입니다. – bengoesboom

1

모든 로그인을 추적하고 해당 데이터를 사용하여 업적을 추정 할 수 있습니다. 개별 로그인 추적 및 검색 속도가 느려질 수 있습니다. 매우 많은 사용자 기반과 많은 로그인이있는 경우 로그인시 이러한 카운트를 수행하는 것이 쉽지 않을 수 있습니다.

더 빨리되고 싶다면 특정 업적에 대한 마지막 로그인 날짜를 추적 한 다음 생각한 것처럼 들리는 카운터를 증가시킬 수 있습니다.

관련 문제