Получение показателя «Дней посещения» в отчете списка пользователей в формате CSV

Здравствуйте,

Существует колонка (Дней посещений), которую мы видим по ссылке:

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

Будет здорово, если бы мы могли добавить эту колонку в CSV-файл со списком пользователей, который генерируется через:
Панель администратора => Вкладка Пользователи => Кнопка “Экспорт”

3 лайка

Это не то, на что вы надеялись услышать, но…

Файл экспорта пользователей содержит поля из таблицы User.
Поле days_visited берётся из таблицы User_Stats.

Хранить одни и те же данные несколько раз было бы «анти-нормализацией» (например, если бы это поле присутствовало в обеих таблицах). Насколько я помню, то, что вы видите, — это результат выполнения JOIN-запроса, который использует таблицу User, а также другие таблицы, связанные с пользователем.

Тем не менее, с помощью плагина 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_entered существует в функции get_base_user_array, как и другие столбцы… не кажется ли это ошибкой?

1 лайк

Существуют поля, которые меня интересовали, но отсутствовали в экспорте (на момент примерно 1–2 лет назад). Я предполагал, что это сделано намеренно, а не является ошибкой, но так и не стал углубляться. Возможность экспорта стала доступна только администраторам, и без реальных данных для работы сложность возросла, интерес угас, а несколько серьёзных жизненных обстоятельств окончательно похоронили это направление.

Не вникая в детали, можно предположить, что если ядро не было изменено, то плагин мог бы легко извлекать значения из таблиц и добавлять их в CSV-экспорт. Однако я считаю, что плагин Data Explorer — отличный кандидат для создания кастомного экспорта.

В настоящее время мой интерес в основном сместился с взлома файлов ядра, доступных только администраторам, к разработке индивидуальных пользовательских скриптов.

Возможно, при достаточном консенсусе текущий экспорт можно будет изменить?

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 лайков