1

私は次の表を持っています:

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回表示され(両方のツイートが表示されます)、その人の最新のツイートのみを取得したいということです。

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

4

2 に答える 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)
于 2012-04-11T01:11:05.887 に答える
0

私はそれをテストしていませんが、これを試してください:

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

ユーザーが重複していないツイートのリストが表示されます。結果を照会してコースを取得します。


uniqまた、重複せずに配列を返すruby​​ メソッドを使用したい場合もあります。

于 2012-04-11T00:31:30.073 に答える