Badge visiteur 30 jours

J’ai vu que ce badge existe pour les utilisateurs qui visitent le forum de manière consécutive pendant 10 ou 365 jours, mais je souhaite créer un badge automatique dans mon forum qui est décerné à une personne ayant visité le forum pendant 30 jours consécutifs.

Par-dessus tout, ce qui m’intéresse, c’est d’obtenir le code SQL.

À titre indicatif, vous pouvez trouver les requêtes existantes en utilisant l’Explorateur de données.

Par exemple : SELECT * from badges WHERE query LIKE '%10 jours%'

Voici celle pour 365 jours :

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 365 ) SELECT user_id , "start" + interval '365 jours' "granted_at" FROM visits WHERE "rank" = 1

et pour 10 jours :

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 10 ) SELECT user_id , "start" + interval '10 jours' "granted_at" FROM visits WHERE "rank" = 1

Donc, je suppose que ceci pourrait faire l’affaire pour 30 :

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 30 ) SELECT user_id , "start" + interval '30 jours' "granted_at" FROM visits WHERE "rank" = 1

… ce que j’ai vérifié et qui semble retourner des résultats apparemment cohérents, mais je n’ai pas vérifié les résultats en détail :sweat_smile:

Merci beaucoup, je vous suis reconnaissant.

@merefield

J’essaie de copier le code, mais il semble bloqué. Merci encore. :heart:

Bloqué ? Que voulez-vous dire par là ? (Veuillez excuser mon mauvais espagnol) Je viens de vérifier et tout fonctionne correctement. Vérifiez que vous avez rempli tous les champs obligatoires et qu’il n’y a aucune erreur de validation indiquée ci-dessus. Si l’enregistrement réussit, vous devriez voir le nouveau badge en bas de la liste sur la gauche. Vous pouvez également prévisualiser les résultats en utilisant le lien situé sous le SQL.

J’essayais sur mon forum de copier le SQL du badge faisant référence aux 10 jours, puis de le modifier pour 30 jours, mais il ne me permettait pas de le copier. Cependant, grâce à votre aide, j’ai pu créer le badge que je souhaitais.