2011-04-17 15 views
1

ユーザーが最近返信したすべてのディスカッションを選択しようとしています。しかし、次のクエリは機能しません。 0エントリを返します。私はSQLに新しいです、私は "IN"の私の使用に間違っていると思います。トラブルシューティングこれを助けてください:SQLiteクエリの問題

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"でdiscussionable_idを置き換える必要がありますか? :)そのような退屈な問題。さて、返された議論をcomment.created_atでどのように注文するのですか?別の質問を開くべきですか?

UPDATE1:、私はsqlite3のコンソールでSQLクエリを実行しようとした、とにかく

# 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 

0のエントリを返します。 申し訳ありませんが、ここではActiveRecordのです。ありがとう!

+0

ここでActiveRecordはどこですか? –

+1

はdicussable_idで、commentable_idは関連していますか?議論やコメントの表を投稿してください。彼らがどのように関連しているかについても触れています。 – Ravin

答えて

0

は考えてみましょう:INによって確立されるようにしようと同じ関係を示し

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 

を。それがゼロの結果を返すなら、それは答えです;-)おそらく関係は期待通りではありませんか? (d.discussable_id = c.commentable_idがあることは奇妙に思えます)

ハッピーコーディング。

+0

'JOIN'ではなく' LEFT JOIN'を試すことができます。 –

+0

ありがとう!私は理由を理解しました:UPDATE2を見てください。しかし今、私はcomment.created_atによってディスカッションを注文したいと思います。別の質問をするべきですか? – randomor

+0

ここで別の質問を開いたので、お手伝いします:http://stackoverflow.com/questions/5695459/sql-query-order-problem – randomor