【发布时间】:2011-05-17 02:45:34
【问题描述】:
一个问题有很多答案。
很容易找到所有已回答的问题并按最新答案排序:
def self.answered
joins(:answers).order('answers.created_at desc')
end
在控制器中,我会做 @answered = Question.answered
但是如果一个问题被回答了不止一次,这会返回重复的记录。
另一方面,很容易找到已回答的不同问题,但前提是我不尝试按其答案' created_at 日期对它们进行排序:
def self.answered
joins(:answers).select("DISTINCT questions.title")
end
(我们在这里假设问题标题被验证为唯一,因此这会产生所有唯一记录)。
问题:
此查询不能按答案的“created_at”日期排序,因为我在 SQL 选择语句中只选择了问题的标题...
def self.answered
joins(:answers).select("DISTINCT questions.title").order('answers.created_at desc')
end
导致此错误(我正在使用 Postgres):
PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我猜,这意味着它想在 select DISTINCT 语句中看到“answers.created_at”。
如果我想通过 questions.created_at 进行排序,以下内容似乎可行,但这不是我想要的:
def self.answered
joins(:answers).select("DISTINCT(questions.title), questions.created_at").order('questions.created_at desc')
end
这就是我的基本 SQL 知识不足之处。如何选择不同的问题(只有那些有答案的问题)并按最新答案的 created_at 日期降序排列?
我想使用 Rails 3 Active Record 查询来编写它,但直接使用 SQL 就可以了。我希望有人可以提供帮助。
【问题讨论】:
标签: sql ruby-on-rails activerecord join distinct