9

時々、データ処理のためにDB内の大量のデータを照会する必要があります。

たとえば、次のテーブルがあります。アクティビティ、先月アクティビティを作成したすべてのユーザーを検索したい、

私はデータ配列だけに関心があり、多くのアクティビティモデルを作成したくありません。

私にできる方法はありますか?

このコードのように:

Activity.where('created_at > ?', Time.now - 1.month).get_data(:user_id, :created_at)
=> [[1, 2012-02-01] .... ]
4

2 に答える 2

17

このアプローチを試してください:

sql = "SELECT * from activities limit 10"
result = ActiveRecord::Base.connection.execute(sql)
result.to_a

SQLクエリについてはよくわかりませんが、あなたはその考えを理解していると思います。

于 2012-07-30T10:52:32.523 に答える
0

試す:

Activity.where(['activities.user_id = ? 
                 AND activities.created_at BETWEEN ? 
                 AND ?', users, 1.month.ago, Time.zone.now])

これにより、一連のユーザーに対して過去1か月間に作成されたすべてのアクティビティが返されます。このクエリの唯一の潜在的な問題は、非常に大きなデータセットにあります。このクエリを実行する前に、named_scopeを使用してアクティビティを絞り込み、データベース内のすべてのアクティビティを検索しないようにすることをお勧めします。

于 2012-07-30T14:37:49.623 に答える