MikeNolan
(Mike Nolan)
2025 年 1 月 30 日午前 3:46
1
Discourseフォーラムのメンバーから、Discourseに連続してフォーラムを訪問したり投稿したりした日数を表示/認識する方法があるかどうか尋ねられました。管理者のユーザー情報にはその情報が見当たらないのですが、どこかに保存されていますか?
参考までに、redditにはこの機能があります。
はい、熱心なファン、愛好家、熱狂的なファンなどのバッジがあり、これらは連続して訪問した日数に対するものです。訪問 = 投稿に「いいね!」をするか、返信するかのどちらかだったと記憶しています。
Lilly
2025 年 1 月 30 日午前 4:23
3
データエクスプローラーのクエリを作成できるかもしれません。user_visits テーブルスキーマはここにあります。
# == Schema Information
#
# Table name: user_visits
#
# id :integer not null, primary key
# user_id :integer not null
# visited_at :date not null
# posts_read :integer default(0)
# mobile :boolean default(FALSE)
# time_read :integer default(0), not null
#
# Indexes
#
# index_user_visits_on_user_id_and_visited_at (user_id,visited_at) UNIQUE
# index_user_visits_on_user_id_and_visited_at_and_time_read (user_id,visited_at,time_read)
# index_user_visits_on_visited_at_and_mobile (visited_at,mobile)
#
たとえば、このようなものですか?
WITH consecutive_visits AS (
SELECT
user_id,
visited_at,
visited_at - INTERVAL '1 day' * ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY visited_at) AS grp
FROM
user_visits
),
visit_streaks AS (
SELECT
user_id,
COUNT(*) AS streak_length
FROM
consecutive_visits
GROUP BY
user_id, grp
)
SELECT
user_id,
MAX(streak_length) AS longest_streak
FROM
visit_streaks
GROUP BY
user_id
ORDER BY
longest_streak DESC
LIMIT 100
あるいは、user_actions テーブルと組み合わせることもできるかもしれません(いいねや投稿を伴う訪問?)。これはここにあります。
# Table name: user_actions
#
# id :integer not null, primary key
# action_type :integer not null
# user_id :integer not null
# target_topic_id :integer
# target_post_id :integer
# target_user_id :integer
# acting_user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# idx_unique_rows (action_type,user_id,target_topic_id,target_post_id,acting_user_id) UNIQUE
# idx_user_actions_speed_up_user_all (user_id,created_at,action_type)
# index_user_actions_on_acting_user_id (acting_user_id)
# index_user_actions_on_action_type_and_created_at (action_type,created_at)
# index_user_actions_on_target_post_id (target_post_id)
# index_user_actions_on_target_user_id (target_user_id) WHERE (target_user_id IS NOT NULL)
This file has been truncated. show original