标题可能有点晦涩,但上下文是想将一个类别转换为“私有”,同时能够识别在特定时间范围内参与过该类别的所有用户,并将他们添加到某个组中,以便为该组设置访问权限。
假设该组可以提前创建。
目前支持的功能:
- 创建组
- 为组分配类别权限
- 修改类别权限
缺少的功能是根据用户在特定时间范围内与该类别的互动情况,“将这些用户分配给一个组”的方法。
也许有可以执行的查询或代码可以识别这些用户并将他们分配给一个组?
标题可能有点晦涩,但上下文是想将一个类别转换为“私有”,同时能够识别在特定时间范围内参与过该类别的所有用户,并将他们添加到某个组中,以便为该组设置访问权限。
假设该组可以提前创建。
目前支持的功能:
缺少的功能是根据用户在特定时间范围内与该类别的互动情况,“将这些用户分配给一个组”的方法。
也许有可以执行的查询或代码可以识别这些用户并将他们分配给一个组?
我使用了一个数据探索器查询来找出在 user_actions 中参与了某个主题的用户:
-- [params]
-- int :topic = 3620561
select user_id,
sum(action_type) actions,
sum(case action_type when 5 then 1 else 0 end) replies
from user_actions ua
join users u on u.id = ua.user_id
where target_topic_id = :topic
and moderator is false
and admin is false
group by ua.user_id
这包括了回复、点赞、编辑和提及等操作。我还有一个包含投票响应的查询。这是为了收集潜在客户,但我认为除了回复之外还做了一些事情的人可能对该主题有要求。“参与”的定义可能是一个有用的练习。
要扩展到整个类别,请与 topics t on target_topic_id = t.id 连接,并在 where 子句中添加 category_id。根据 ua.created_at 定义时间范围应该不难。
谢谢 @jericson,这正是我想要的。
我猜我可以将结果输入到一个查询中,然后将所有用户添加到一个组中。
有人有过这方面的经验吗?也许最好是粗暴地复制粘贴用户 ID 并运行一个 Ruby 函数,如果有什么可用的?
这通常是我首选的解决方案。但更有意义的做法是从批量操作示例中借鉴,并在 Rails 中对 User 对象应用 where 子句。(有一个测试环境在这种时候很有帮助!)
根据用户数量,您可以将逗号分隔的列表粘贴到“添加用户到组”框中,这是否有用?
(还有一个基于徽章将用户添加到组的自动化,您可以使用此 SQL 作为基础。不过,如果您对 Rails 选项满意,这可能有点复杂)
我正是为此(以及测试 Ember 5 会破坏什么
)才把预演环境应用上线。
在接下来的几天里,我会深入研究一下,前提是我的“正经工作”能给我留出时间 ![]()
以防其他人需要,在此留下完整的查询:
select ua.user_id, u.username, sum(action_type) actions, sum(case action_type when 5 then 1 else 0 end) replies from user_actions ua
join users u on u.id = ua.user_id
join topics t on target_topic_id = t.id
where ua.created_at > 'YYYY-MM-DD'::date and t.category_id = CATEGORY_ID
group by ua.user_id, u.username;
只需将 YYY-MM-DD 替换为您的截止日期,将 CATEGORY_ID 替换为您的类别 ID。
结果将显示 user_id、username、actions 和 replies。
我建议的选项在 UI 中可用,尽管第二个选项需要 Discourse Automation 插件(不过这是一个很好的插件
)
完美运行,我忘了你可以在 UI 中添加多个用户名 ![]()
对于其他人,要导出 psql 查询结果,只需运行:
psql
\o /home/discourse/output.txt
<在此处插入你的查询>
\o
exit
现在在 /home/discourse/output.txt 中,你将获得查询结果,就像它在屏幕上打印出来一样。