2012-04-11 7 views
1

は、私は次の表を持っているコースIDで検索:Railsの - すべてのユーザー=ユニーク

Tweet(id: integer, from_user: string, tweet_text: string, tweet_id: integer, course_id: integer, tweet_already_exists: boolean, tweet_posted_to_reviews: boolean, created_at: datetime, updated_at: datetime) 

そして、特定のコースのために、私はユーザーによるユニークな、最後の50件のつぶやきを取得したいのですが。私はこれまでのところ得ている:これで

Tweet.order("tweet_id desc").find_all_by_course_id(@course.id).first(50) 

問題は、ユーザーが複数回ツイートしている場合、彼らは2回表示(両方のツイートが表示されます)と私はその人の最新のつぶやきを取得したいということです。

ありがとうございました!

答えて

1

それは少し複雑ですが、私はそれはあなたが簡単な方法でやりたいクエリを実行することが可能ですよく分からない:

Tweet.where("tweets.updated_at >= (SELECT MAX(t.updated_at) FROM tweets AS t WHERE t.from_user=tweets.from_user)").order("tweets.tweet_id desc").find_all_by_course_id(@course.id).first(50) 
+0

こんにちはtsherif、これは素晴らしいです!ほぼ完璧に動作します!唯一のことは、ユーザーの最初のつぶやき(最後のものではなく)を引っ張っていることです。 '.order(" tweets.tweet_id desc ")'を '.order(" tweets.tweet_id asc ")に変更すると、ページ上のツイートの順序が変更されます(ユーザーの最新のツイートを引きます)。どのようにそれを修正するための任意のアイデア?また、このクエリがPG上で動作するかどうかを知っていますか(Cedarスタックを使用してherokuにサイトがありますか?)あなたの助けをもう一度ありがとう、非常に感謝! –

+0

ネストされたクエリの '> ='と '<='と 'MAX'を' MIN'に変更してみてください。しかし、PGのものについてはわかりません... – tsherif

+0

Brilliant!そんなにtsherifありがとう、それはローカルで動作します。どのようにクエリを作成したのかを理解するために私が見ておくべき特定のリソースがあるかどうか教えてください。再度、感謝します!! –

0
私はそれをテストしていません

、これを試してみてください。

Tweet.find(:all, :select => 'DISTINCT from_user', :order => 'tweet_id desc') 

が重複し、ユーザーせずにあなたのつぶやきのリストが表示されます。結果を照会してコースを取得します。


あなたの夜も重複せずに配列を返すRubyのメソッドuniqを使用します。

+0

私はそれを試してみたが、それを動作させるように見えることはできません他のすべてのパラメータとともに内部に格納されます。 uniq呼び出しをどこに追加しますか(ユニークな "from_user"を見つけるために) –

+0

あなたはすべてのもの(ユーザー、コース、つぶやき)ごとに1つのテーブルしかありませんか? –

+0

この場合、私はTweetテーブル(from_userを含む上記のフィールド)とcourse_idを持つCourseテーブル、およびコースに関連する他のフィールドを持っています。あなたの助けをもう一度ありがとう。 –

関連する問題