J’essaie de créer un badge d’argent pour 10 modifications wiki (sur tous les messages) et un badge d’or pour 100 modifications wiki - cependant, ni moi ni l’Assistant du Forum n’avançons.
J’ai expérimenté ce type de format pour éviter le problème MIN/MAX d’attribution de la mauvaise date granted_at lors de l’intégration d’un badge en ‘milieu de parcours’ (ils ont tendance à mieux fonctionner lorsque les gens n’ont pas déjà rempli les critères avant l’introduction du badge).
Donc, peut-être quelque chose comme ceci :
SELECT
user_id,
created_at granted_at
FROM (
SELECT
pr.user_id,
pr.created_at,
ROW_NUMBER() OVER (PARTITION BY pr.user_id ORDER BY pr.created_at) as row_number
FROM post_revisions pr
INNER JOIN badge_posts p ON p.id = pr.post_id
WHERE p.wiki = TRUE
AND pr.hidden = FALSE
AND pr.user_id > 0
) AS revisions
WHERE row_number = 100
(Je n’ai pas inclus la clause habituelle ‘ne pas inclure les sujets ou publications supprimés’ car les modifications apportées aux anciens wikis devraient probablement toujours être prises en compte. Je n’ai pas non plus ajouté le remplissage, mais je pense que celui-ci serait ‘mettre à jour quotidiennement’ comme déclencheur ?)
Après un peu plus de réflexion (et une petite discussion avec Bert ), je pense que ROW_NUMBER serait le meilleur choix pour celui-ci. Je vais modifier la requête ci-dessus.