在 CSV 用户列表报告中获取(访问天数)

您好,

我们在以下链接中可以看到“访问天数”这一列:

https://LINK/admin/users/2/USERNAME

如果能在从以下路径生成的 CSV 用户列表文件中包含该列,那就太好了:
管理面板 => 用户标签页 => “导出”按钮

3 个赞

这恐怕不是您想听到的,但……

用户导出文件包含来自用户表(User table)的字段。
days_visited”字段来自用户统计表(User_Stats table)。

将完全相同的数据重复存储(例如,如果该字段同时存在于两个表中)属于“反规范化”(anti-normalization)。据我所知,您看到的结果是一个 JOIN 查询的输出,该查询不仅使用了用户表,还关联了与用户相关的其他表。

不过,使用数据探索器(Data Explorer)插件,您完全可以轻松运行此类 JOIN 查询,生成包含该字段的导出文件。

3 个赞

不够精确,CSV 文件包含 likes_given 和 likes_received 列,这些列也存在于同一个表 user_stats 中:

--
-- Name: user_stats; Type: TABLE; Schema: public; Owner: discourse
--

CREATE TABLE public.user_stats (
    user_id integer NOT NULL,
    topics_entered integer DEFAULT 0 NOT NULL,
    time_read integer DEFAULT 0 NOT NULL,
    days_visited integer DEFAULT 0 NOT NULL,
    posts_read_count integer DEFAULT 0 NOT NULL,
    likes_given integer DEFAULT 0 NOT NULL,
    likes_received integer DEFAULT 0 NOT NULL,
    topic_reply_count integer DEFAULT 0 NOT NULL,
    new_since timestamp without time zone NOT NULL,
    read_faq timestamp without time zone,
    first_post_created_at timestamp without time zone,
    post_count integer DEFAULT 0 NOT NULL,
    topic_count integer DEFAULT 0 NOT NULL,
    bounce_score double precision DEFAULT 0 NOT NULL,
    reset_bounce_score_after timestamp without time zone
);

来自 schema.sql

3 个赞

谢谢,你说得对。看来这里涉及的内容比我以前记得要更多。

3 个赞

感谢指出相关文件 :smile:

既然 topics_enteredget_base_user_array 函数中的其他列一样确实存在……这看起来是不是一个 bug?

1 个赞

有些我感兴趣的字段在导出中并不存在(大约是一两年前)。我原以为这是有意为之而非漏洞,但从未进一步核实。导出功能后来仅限管理员使用,由于无法再获取真实数据进行操作,难度增加,兴趣也随之减退,加之现实生活的一些重压,最终让我放弃了这条路径。

若不深入查看,我大胆猜测:如果核心代码未作改动,通过插件可以轻松从数据表中获取这些值并添加到 CSV 导出中。不过,我认为“数据探索器”插件是进行自定义导出的一个良好候选方案。

目前,我的兴趣大多已从对仅限管理员的核心文件进行“黑客式”修改,转向了编写定制化的用户脚本。

或许在达成足够共识的情况下,当前的导出功能可以作出调整?

3 个赞

我已经编写了所需的查询:

SELECT
    u.username_lower AS "username",
    stats.days_visited
FROM users u
LEFT JOIN user_stats stats ON stats.user_id = u.id
ORDER BY u.id

不过,这些数据在用户列表报告中确实很有用,可以提供一些洞察。

谢谢 @Mittineague :rose:

5 个赞