游戏化与邀请

像这样是否会更好一些(已调整为适合可计分查询格式 - 这是数据浏览器的测试):

-- [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 个赞