我想创建一个基于 SQL 的报告,以了解我们的用户在发布有关什么类型的内容。
类别、主题、标签——这些是我已经确定可以为我提供这些信息的字段,而帖子计数将是指标(我认为,基本上想用它来了解受欢迎程度)。
是否有其他字段可以支持这一点?是否已有可供我使用的查询,因为我假设其他人也曾请求过?
我想创建一个基于 SQL 的报告,以了解我们的用户在发布有关什么类型的内容。
类别、主题、标签——这些是我已经确定可以为我提供这些信息的字段,而帖子计数将是指标(我认为,基本上想用它来了解受欢迎程度)。
是否有其他字段可以支持这一点?是否已有可供我使用的查询,因为我假设其他人也曾请求过?
这不是 SQL 查询,但您可能已经注意到:
/categories 会为您提供每个类别每月新增主题的数量,这可能非常有用。
/tags 会为您提供按标签计算的主题数量。
以防您不知道(但可能已经知道了!)
我不确定您在这里指的是什么。
这些是社区管理部分中的报告吗?
我见过这个,但基本上想将它们全部整合到一个地方——这样您就可以看到一个类别有多少主题或标签等。
它们是 URL 路径。
我不太确定您设想如何将类别、标签和主题(以及每个的帖子数)包含在同一份报告/查询中。
我认为您可以分两份来完成——一份用于类别,一份用于标签,其中包含在特定时间范围内每个类别/标签下新主题和新帖子的数量。甚至可以包括发帖的用户数?
这样,结果表就会是这样的:
| 类别 | 新主题 | 新帖子 | 用户 |
|---|---|---|---|
| 类别 a | 9 | 15 | 4 |
| 类别 b | 56 | 167 | 32 |
好的,我已经输入了 Categories - Discourse Meta,我猜这正是你想要的意思。
本质上,我希望将类别/标签/主题合并到一个输出中,原因如下:
本质上,根据我的理解,我需要使用 SQL 连接类别、标签和主题,可能还有帖子,并且我想知道这是否已经完成,以便查看代码/是否有某种代码/查询库?
|类别|主题|标签|帖子|用户|
| — | — | — | — |—|\n|汽车|爱汽车|车轮|44|1\n|汽车|恨汽车|车轮|32|3\n|汽车|恨汽车|车门|39|4\n|汽车|汽车如何工作?|车门|32|1\n|事物如何工作|汽车如何工作?|操作方法|32|3\n\n这是愿景的一个例子。这将允许进一步分析,以了解诸如“在汽车类别中发帖的用户中有多少百分比谈论车轮”之类的内容。\n\n我明白这将在数据浏览器中结合帖子、主题、标签、类别,可能还有另一个表——我只是在这里发帖是为了了解这是否已经完成/在哪里可以找到之前创建的 SQL 查询(不是在我们的账户中,我的意思是普遍存在的)。\n\n希望这有道理,昨天才开始调查
啊,我明白了。您想要一个包含额外细节的主题列表,而不是一个概要性的概述。我认为这应该是可行的。 ![]()
我认为唯一需要注意的地方是,一个主题可以有多个标签,但让我们先弄一个出来看看效果。 ![]()
但是,要浏览其他现有查询,您可以使用仪表板上提供的标准查询(您可以在此处找到 SQL 版本,并按 dashboard-sql 分组),以及数据浏览器中捆绑的一些标准报告,还有 meta 上的这个链接,其中包含一组自定义查询,并按 sql-query 标签分组。
@SStrong - 也许可以试试这个:
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31
WITH tag_names AS (
SELECT
t.id AS topic_id,
string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
FROM topics t
JOIN topic_tags tt ON tt.topic_id = t.id
JOIN tags ON tags.id = tt.tag_id
WHERE t.created_at BETWEEN :start_date AND :end_date
GROUP BY t.id
),
user_count AS (
SELECT
p.topic_id,
COUNT(DISTINCT p.user_id) AS users
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.created_at BETWEEN :start_date AND :end_date
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
AND p.post_type = 1
AND p.user_id > 0
GROUP BY p.topic_id
)
SELECT
t.category_id,
t.id AS topic_id,
tn.tags,
t.posts_count,
uc.users
FROM topics t
JOIN tag_names tn ON tn.topic_id = t.id
JOIN user_count uc ON uc.topic_id = t.id
WHERE t.created_at BETWEEN :start_date AND :end_date
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title
抱歉,以为我已经回复了。
是否可以修改代码以同时保存类别名称和主题名称?我不知道“帖子名称”是否是一个实际的东西,或者它实际上是主题名称?
我尝试自己修改代码,但我目前还不了解表是如何协同工作的,因为我得到的结果是 0 条记录,而不是与之前相同数量的记录,只是包含文字而不是 ID。
没问题。
在数据浏览器中查看时,category_id 和 topic_id(以及许多其他 ID)会自动转换为可用的站内链接,但如果导出到其他地方进行分析,则可以使用类别名称和主题标题代替:
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31
WITH tag_names AS (
SELECT
t.id AS topic_id,
string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
FROM topics t
JOIN topic_tags tt ON tt.topic_id = t.id
JOIN tags ON tags.id = tt.tag_id
WHERE t.created_at BETWEEN :start_date AND :end_date
GROUP BY t.id
),
user_count AS (
SELECT
p.topic_id,
COUNT(DISTINCT p.user_id) AS users
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.created_at BETWEEN :start_date AND :end_date
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype = 'regular'
AND p.post_type = 1
AND p.user_id > 0
GROUP BY p.topic_id
)
SELECT
c.name AS category_name,
t.title,
tn.tags,
t.posts_count,
uc.users
FROM topics t
JOIN tag_names tn ON tn.topic_id = t.id
JOIN user_count uc ON uc.topic_id = t.id
JOIN categories c ON c.id = t.category_id
WHERE t.created_at BETWEEN :start_date AND :end_date
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title