我正在尝试选择用户回复的所有最近讨论。但以下查询不起作用。返回0个条目。我是sql的新手,我猜我使用“IN”时出了点问题。请帮助排除故障:
SELECT * FROM discussions
WHERE discussable_id IN
(SELECT commentable_id FROM comments
WHERE commentable_type = 'Discussion' AND user_id = 1);
另外,如果我想通过comment.created_at对上述查询进行排序,该怎么办?我怎么做?另外,如果我还要包括用户创建的所有讨论,并按最新活动对所有查询进行排序(可以是discussion.created_at或comment.created_at),该怎么办?顺便说一句,我在轨道上。我一直试图解决这个问题几个小时。非常感谢任何输入。非常感谢!
UPDATE2:看起来我应该用“id”替换查询中的discussable_id,你发现了吗? :)这样一个单调乏味的问题。现在,我如何通过comment.created_at订购返回的讨论?我应该打开另一个问题吗?
UPDATE1: 对不起,这是主动记录:
# Table name: discussions
#
# id :integer not null, primary key
# title :string(255) not null
# content :text(255) not null
# created_at :datetime
# updated_at :datetime
# user_id :integer
# discussable_id :integer
# discussable_type :string(255)
class Discussion < ActiveRecord::Base
has_many :comments, :as => :commentable, :dependent => :destroy
#this is the scope that I'm having trouble with:
scope :user_replied_group_discussions, lambda {|user| replied_by(user) }
def last_reply
if self.comments.any?
self.comments.last.created_at
else
self.created_at
end
end
private
def self.replied_by(user)
discussion_ids = %(SELECT commentable_id FROM comments
WHERE commentable_type = 'Discussion' AND user_id = :user_id)
where("discussable_type = 'Group' AND discussable_id IN (#{discussion_ids}) ",
{ :user_id => user })
end
end
# Table name: comments
#
# id :integer not null, primary key
# content :text
# created_at :datetime
# updated_at :datetime
# commentable_id :integer
# commentable_type :string(255)
# user_id :integer
#
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
belongs_to :user
end
无论如何,我试图在sqlite3控制台中运行sql查询,返回0条目。谢谢!
答案 0 :(得分:0)
考虑:
SELECT d.* FROM discussions d
JOIN comments c
ON d.discussable_id = c.commentable_id
WHERE c.commentable_type = 'Discussion'
AND c.user_id = 1
显示与IN
尝试建立的关系相同的关系。如果返回零结果,那么这就是答案;-)也许关系不如预期? (d.discussable_id = c.commentable_id
似乎很奇怪。)
快乐的编码。