过滤掉账号在话题创建前 x 天创建的用户点赞

嘿,

我正在尝试添加另一个过滤器,如果用户在某个主题创建前不到 2 天创建,则不将其包含在内。

这是我尝试过的。我对 SQL 相对陌生,所以不知道该怎么做。有什么帮助吗?

SELECT *
FROM topic t post_actions pa INNER JOIN users u ON u.id = pa.user_id
WHERE post_id = 1
    AND post_action_type_id = 2
    AND u.created_at < t.created_at-2

我不确定您想要什么?您能否提供更多关于您想实现的目标的详细信息?

我正在尝试修复日期过滤器,以筛选出在某个主题创建前不到两天创建的用户。有人告诉我可以使用 datediff 或 INTERVAL,但都无法正常工作。

另外,我需要帮助将主题 t 添加为另一个内部连接,但我已经解决了:
FROM post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id
t.id 显示为数字而不是预览,有什么办法可以解决这个问题吗?

对于这个问题,你只需要将 t.id 别名为 topic_id 即可,它会自行生效。:+1:

你可以在这个主题中找到更多关于 Explorer 用法的示例 - IDs in Data Explorer - #3 by tshenry

当你说“某个主题”时,每次都是同一个主题吗?(即静态主题 ID)

1 个赞

是的,每次都是同一个话题。

所以我想我已经用这个解决了。这产生了1000多个结果,所以我尝试添加
AND t.id = post.topic_id

这把列表缩短到16个结果,但仍然有4个相同的东西。不知道该如何解决。

SELECT
    t.id as topic_id,
    pa.post_id,
    pa.user_id,
    pa.created_at,
    u.created_at
FROM  post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id INNER JOIN posts p on p.topic_id = p.topic_id
WHERE post_id = 15000
    AND t.id = 7000
    AND post_action_type_id = 2
    AND u.created_at < t.created_at - INTERVAL '2 DAY'

编辑:将
INNER JOIN posts p on p.topic_id = p.topic_id
更改为
INNER JOIN posts p on p.topic_id = t.id
这将其缩减到16个结果,与之前相同。

现在我认为仍然有16个结果的原因是t.id = t.id。但不知道可以改成什么。

不过,其中有一些小问题,但我对 SQL 还不算精通,无法完全解释清楚。:slightly_smiling_face:

我认为,如果你已经有了 post_id,就不需要 topic_id 了,因为 post id 对于该帖子(以及主题)是唯一的。你似乎还试图根据第二个表中不存在的字段来连接一些额外的表(例如,t.id = t.id 是 topics 表中完全相同的字段)。而且,如果你查询的主题是静态的,那么就不需要相对的 INTERVAL,因为它将始终是相同的日期(即,比帖子 15000 创建早两天),所以你可以将其设置为一个明确的日期。

我还没有机会尝试我自己的版本,但我学到的 SQL/徽章技能大部分都来自于在 Meta 上搜索不同的示例,并从中借鉴一些零碎的知识。:slight_smile: 很多都包含在 data-explorer 标签下,而且在 一些常见的徽章查询想法 中有大量不同示例,或许值得浏览一下?

是的,我知道,但每当我删除topic_id的AND时,结果不知何故会回升到1000。我会查看您发送的链接。希望我能在那里解决一些问题。

我还是不确定我是否明白你的意思,但如果你知道 post_id 和你想从中包含新用户的日期,那么也许是这样的?

-- [params]
-- int :post_id
-- date :date


SELECT pa.user_id,
       pa.created_at AS reltime$time
FROM post_actions pa
JOIN users u ON u.id = pa.user_id
WHERE pa.post_id = :post_id
AND post_action_type_id = 2
AND u.created_at::date > :date
ORDER BY pa.created_at DESC

这将提供一个列表,其中包含喜欢某个帖子并且其账户是在你输入的日期之后创建的用户(按他们喜欢帖子的时间排序)。

2 个赞

我已经设法让它全部正常工作了,我以前从未听说过 reltime,并且我已经将它实现了。再次感谢您的帮助!

最后一个关于 reltime 的问题。有没有办法将名称从“time”更改为“Topic created”?

1 个赞

当然可以。 :slightly_smiling_face: 如果你将其更改为 reltime$topic_created,应该就可以了。 :+1:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.