SQLite查询问题

时间:2011-04-17 16:04:15

标签: sql ruby-on-rails sqlite activerecord

我正在尝试选择用户回复的所有最近讨论。但以下查询不起作用。返回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条目。谢谢!

1 个答案:

答案 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似乎很奇怪。)

快乐的编码。