J’ai créé cette requête, mais dans mon cas, il y a un problème.
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "t"
LINE 31: AND t.category_id = ANY ('{48,23}'::int[])
Voici le code de la requête :
-- [params]
-- int :months_ago = 1
WITH query_period as (
SELECT
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' as period_start,
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' + INTERVAL '1 month' - INTERVAL '1 second' as period_end
)
SELECT
p.created_at,
p.topic_id,
p.id as post_id,
p.like_count,
p.post_number,
p.reply_count
FROM posts p
LEFT JOIN post_search_data psd ON psd.post_id = p.id
RIGHT JOIN query_period qp
ON p.created_at >= qp.period_start
AND p.created_at <= qp.period_end
WHERE
reply_count = 0
AND post_number != 0
AND t.category_id = ANY ('{48,23}'::int[])
J’ai deux questions :
Comment définir la table Categories et obtenir cette erreur ?
Comment démarrer la période un jour après le jour actuel ?
L’erreur est due à l’absence de la colonne category_id dans la table posts. Pour que cela fonctionne, vous devez effectuer une jointure avec la table topics.
Comme ceci :
LEFT JOIN topics t ON t.id = p.topic_id
Si vous détaillez les données dont vous avez besoin, je peux essayer d’ajuster la requête.
Cherchez-vous tous les posts, et non les topics, qui appartiennent aux catégories 48 et 23 ? Les posts et les topics supprimés doivent-ils être exclus du résultat ?
CURRENT DAY() renvoie la date d’aujourd’hui. Quelle est la période que vous souhaitez rechercher ?
Les publications liées à des sujets supprimés ont également été ignorées.
Période prise en compte dans la requête : period_start: 2021-01-14 / period_end: 2021-02-14
-- [params]
-- int :months_ago = 1
WITH query_period as (
SELECT
DATE_TRUNC('day', CURRENT_DATE - INTERVAL '1 day') - INTERVAL ':months_ago months' AS period_start,
(CURRENT_DATE - INTERVAL '1 day') AS period_end
)
SELECT
p.created_at,
p.topic_id,
p.id AS post_id,
p.like_count,
p.post_number,
p.reply_count
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id
WHERE p.reply_count = 0
AND p.post_number > 1
AND t.category_id IN (48, 23)
AND p.deleted_at IS NULL
AND t.deleted_at IS NULL
AND p.created_at >= (SELECT period_start FROM query_period)
AND p.created_at <= (SELECT period_end FROM query_period)
Cependant, lors de mes tests, j’ai constaté que les résultats incluaient également des publications d’utilisateurs qui devraient être exclus. Sur notre forum, la fonction de modération est assurée par des membres de groupes spécifiques.
Peut-on exclure dans la requête les publications d’utilisateurs appartenant à certains groupes ?
J’ai vérifié le fichier .json de la page du sujet et constaté qu’il ne suit, sous une forme visible, que ces détails d’utilisateur :
“moderator”
“admin”
“staff”
primary_group_name (n’est pas défini sur notre forum, car les modérateurs peuvent appartenir à différents groupes)