是指这样吗?

编写 sql, 查询 3 个月内,评论数最多的帖子。
我需要先了解一下 ruby-china/homeland 项目的数据库结构,特别是帖子和评论相关的表结构,然后才能编写准确的 SQL 查询。根据数据库结构,我可以看到 homeland 项目使用 PostgreSQL 数据库,其中:
-
topics 表存储帖子信息
-
replies 表存储评论/回复信息
-
topics 表中有 replies_count 字段记录评论数量
-
topics 表中有 created_at 字段记录创建时间
以下是查询 3 个月内评论数最多的帖子的 SQL:
SELECT
id,
title,
replies_count,
created_at,
user_id,
node_id
FROM topics
WHERE created_at >= NOW() - INTERVAL '3 months'
AND deleted_at IS NULL
ORDER BY replies_count DESC
LIMIT 10;
如果你想要更详细的信息(包括用户名、节点名等),可以使用这个版本:
SELECT
t.id,
t. title,
t.replies_count,
t.likes_count,
t.created_at,
t.replied_at,
u.login as author_login,
u.name as author_name,
n.name as node_name
FROM topics t
LEFT JOIN users u ON t.user_id = u.id
LEFT JOIN nodes n ON t.node_id = n. id
WHERE t.created_at >= NOW() - INTERVAL '3 months'
AND t. deleted_at IS NULL
ORDER BY t.replies_count DESC
LIMIT 10;
SQL 说明:
-
created_at >= NOW() - INTERVAL '3 months' - 筛选 3 个月内创建的帖子
-
deleted_at IS NULL - 排除已删除的帖子
-
ORDER BY replies_count DESC - 按评论数降序排列
-
LIMIT 10 - 取前 10 条记录(可根据需要调整数量)
如果你想统计的是 3 个月内收到评论的帖子(而不是 3 个月内创建的帖子),可以使用:
SELECT
t.id,
t.title,
COUNT(r.id) as recent_replies_count,
t.replies_count as total_replies_count,
t.created_at,
u.login as author_login
FROM topics t
LEFT JOIN replies r ON r.topic_id = t.id
AND r.created_at >= NOW() - INTERVAL '3 months'
AND r.deleted_at IS NULL
LEFT JOIN users u ON t.user_id = u.id
WHERE t.deleted_at IS NULL
GROUP BY t.id, t.title, t.replies_count, t.created_at, u.login
ORDER BY recent_replies_count DESC
LIMIT 10;
这个版本会统计每个帖子在最近 3 个月内收到的新评论数量。