diff --git a/app/models/topic_user.rb b/app/models/topic_user.rb index 975c79114..4ff10541f 100644 --- a/app/models/topic_user.rb +++ b/app/models/topic_user.rb @@ -180,16 +180,21 @@ class TopicUser < ActiveRecord::Base UPDATE topic_users t SET last_read_post_number = last_read, - seen_post_count = GREATEST(t.seen_post_count, last_read) + seen_post_count = LEAST(max_post_number,GREATEST(t.seen_post_count, last_read)) FROM ( SELECT topic_id, user_id, MAX(post_number) last_read FROM post_timings GROUP BY topic_id, user_id ) as X +JOIN ( + SELECT p.topic_id, MAX(p.post_number) max_post_number from posts p + GROUP BY p.topic_id +) as Y on Y.topic_id = X.topic_id WHERE X.topic_id = t.topic_id AND X.user_id = t.user_id AND ( - last_read_post_number <> last_read + last_read_post_number <> last_read OR + seen_post_count <> LEAST(max_post_number,GREATEST(t.seen_post_count, last_read)) ) SQL end diff --git a/spec/models/topic_user_spec.rb b/spec/models/topic_user_spec.rb index b50ad407a..eeb7f6539 100644 --- a/spec/models/topic_user_spec.rb +++ b/spec/models/topic_user_spec.rb @@ -212,7 +212,7 @@ describe TopicUser do p1 = Fabricate(:post) p2 = Fabricate(:post, user: p1.user, topic: p1.topic, post_number: 2) - TopicUser.exec_sql("UPDATE topic_users set seen_post_count=0, last_read_post_number=0 + TopicUser.exec_sql("UPDATE topic_users set seen_post_count=100, last_read_post_number=0 WHERE topic_id = :topic_id AND user_id = :user_id", topic_id: p1.topic_id, user_id: p1.user_id) [p1,p2].each do |p|