Rewrite recent_topic sql to return unique topics on subquery

This commit is contained in:
Chris Blanchard 2015-09-05 16:23:50 +01:00
parent a8cdbb932e
commit bafb67f702
2 changed files with 6 additions and 5 deletions

View file

@ -43,11 +43,12 @@ class Topic < ActiveRecord::Base
def self.recent_topics def self.recent_topics
find_by_sql %q{ find_by_sql %q{
SELECT DISTINCT topics.* SELECT topics.*
FROM (SELECT id, topic_id FROM (SELECT max(id) as max_id, topic_id
FROM posts FROM posts
ORDER BY id DESC GROUP BY topic_id
LIMIT 20) AS T ORDER BY max_id DESC
LIMIT 10) AS T
INNER JOIN topics INNER JOIN topics
ON T.topic_id = topics.id ON T.topic_id = topics.id
INNER JOIN forums INNER JOIN forums

View file

@ -31,7 +31,7 @@ describe Topic do
describe ".recent_topics" do describe ".recent_topics" do
it "returns 5 unique, most recently posted topics" do it "returns 5 unique, most recently posted topics" do
topics = [] topics = []
6.times do 10.times do
topic = create :topic topic = create :topic
topics << topic topics << topic
3.times { create :post, topic: topic } 3.times { create :post, topic: topic }