게임화 및 초대

이런 방향으로 가는 것이 더 나을까요 (점수화 가능한 쿼리 형식에 맞게 조정했습니다 - 데이터 탐색기를 위한 테스트용 쿼리입니다 :slight_smile:):

-- [params]
-- date :start_date
-- date :end_date

SELECT 
    invited_by_id AS user_id,
    COUNT(*) AS user_invites,
    COUNT(*) * 10 AS invite_score
FROM invited_users iu
  JOIN invites i ON i.id = iu.invite_id
  JOIN users u ON u.id = iu.user_id
WHERE iu.redeemed_at::date BETWEEN :start_date AND :end_date
  AND iu.user_id <> i.invited_by_id 
  AND u.created_at > iu.redeemed_at
GROUP BY invited_by_id
ORDER BY user_invites DESC

사용자가 삭제되면 invited_users 테이블에서 해당 기록이 제거되므로, 더 이상 카운트에 포함되지 않습니다. 삭제가 10일 이내에 이루어진 경우 자동으로 교정되지만, 10일 이상 지난 경우 수동으로 점수를 새로고침해야 합니다.

redeemed_at 날짜를 사용하면 10일 전에 생성된 초대 코드도 정확히 계산할 수 있습니다.

AND iu.user_id <> i.invited_by_id 조건은 자기 자신에 대한 초대를 제외합니다.

users 테이블을 조인하고 AND u.created_at > iu.redeemed_at 조건을 추가하면 기존 사용자가 초대를 받은 경우를 제외할 수 있습니다.

3개의 좋아요