J’ai une base de données SQL Discourse. Je dois trouver les statistiques d’un utilisateur pour un horodatage spécifique.
Par exemple, je dois déterminer combien de publications un utilisateur a faites.
Si j’extrais ces données de user_stats, cela me donnera un nombre depuis son inscription sur le forum jusqu’à présent, mais je dois obtenir cela pour une période spécifique.
Une idée ?
Vous devrez générer les statistiques vous-même en exécutant une nouvelle requête de base de données. Par exemple, pour obtenir le nombre de publications au cours des 30 derniers jours
SELECT count(*) from posts
WHERE user_id=1
AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
Ce sujet contient de nombreuses requêtes d’exemple que vous pouvez utiliser comme point de départ
Mais que se passe-t-il si je veux fournir une heure précise plutôt que des jours, par exemple si je veux chercher entre 2020-02-02 00:00:00 et 2020-03-01 00:00:00 ?
Si j’exécute SELECT count(*) from posts WHERE user_id=16 AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
Je reçois un nombre, mais quand je consulte mes statistiques, il est inférieur à ce nombre.
Si vous voyez cela : j’obtiens 430 depuis la base de données, mais en réalité c’est 308 ?
Le nombre affiché dans l’interface ne concerne que les publications publiques et non supprimées. Le nombre dans la base de données inclut tous les messages, y compris les messages supprimés, les messages privés et les catégories privées.
Vous devrez appliquer des filtres similaires. Quelque chose comme ceci :
SELECT count(*) FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE p.user_id=23968
AND p.deleted_at IS NULL
AND NOT COALESCE(p.hidden, 't')
AND p.post_type = 1
AND t.deleted_at IS NULL
AND COALESCE(t.visible, 't')
AND t.archetype <> 'private_message'
AND p.user_id > 0
AND p.post_number > 1