有时,我需要查询数据库中的大量数据进行数据处理。
例如,我有一个表:Activity,我想找到上个月创建活动的所有用户,
我只关心数据数组,不想创建很多Activity模型,
有什么办法可以做到吗?
像这样的代码:
Activity.where('created_at > ?', Time.now - 1.month).get_data(:user_id, :created_at)
=> [[1, 2012-02-01] .... ]
有时,我需要查询数据库中的大量数据进行数据处理。
例如,我有一个表:Activity,我想找到上个月创建活动的所有用户,
我只关心数据数组,不想创建很多Activity模型,
有什么办法可以做到吗?
像这样的代码:
Activity.where('created_at > ?', Time.now - 1.month).get_data(:user_id, :created_at)
=> [[1, 2012-02-01] .... ]
试试这个方法:
sql = "SELECT * from activities limit 10"
result = ActiveRecord::Base.connection.execute(sql)
result.to_a
我不确定 sql 查询,但我想你明白了。
尝试:
Activity.where(['activities.user_id = ?
AND activities.created_at BETWEEN ?
AND ?', users, 1.month.ago, Time.zone.now])
这将返回过去一个月为一组用户创建的所有活动。此查询的唯一潜在问题是数据集非常大。在运行此查询之前,您可能希望使用 named_scope 来缩小活动范围,这样它就不会搜索数据库中的每个活动。