Gamification et invitations

Est-ce que quelque chose comme ceci fonctionnerait mieux (ajusté pour correspondre au format de requête évaluable - c’est un test pour l’explorateur de données :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

Lorsqu’un utilisateur est supprimé, il est effacé de la table invited_users, il ne serait donc plus compté. Si la suppression a eu lieu dans les 10 jours, elle serait automatiquement corrigée, si plus longtemps, elle nécessiterait un rafraîchissement manuel du score.

L’utilisation de la date redeemed_at tiendrait compte des invitations créées il y a plus de 10 jours.

AND iu.user_id <> i.invited_by_id exclurait également les auto-invitations.

La jointure avec la table users et l’ajout de AND u.created_at > iu.redeemed_at excluraient également l’invitation d’utilisateurs existants.

3 « J'aime »