对于数据分析我需要将两个结果合并为一组。
a.follower_trackings.pluck(:date, :new_followers, :deleted_followers)
a.data_trackings.pluck(:date, :followed_by_count)
而不是丑陋合并一个数组(它们可以有不同的开始日期,而且我们只需要两个数组中存在日期的那些值)我想到了mysql
SELECT
followers.new_followers,
followers.deleted_followers,
trackings.date,
trackings.followed_by_count
FROM
instagram_user_follower_trackings AS followers,
instagram_data_trackings AS trackings
WHERE
followers.date = trackings.date
AND
followers.user_id=5
AND
trackings.user_id=5
ORDER
BY trackings.date DESC
这工作正常,但我想知道我是否可以用ActiveRecord编写相同的内容?
答案 0 :(得分:1)
您可以执行以下操作,该查询应该与原始SQL呈现相同的查询,但它也非常难看......:
a.follower_trackings.
merge(a.data_trackings).
from("instagram_user_follower_trackings, instagram_data_trackings").
where("instagram_user_follower_trackings.date = instagram_data_trackings.date").
order(:date => :desc).
pluck("instagram_data_trackings.date",
:new_followers, :deleted_followers, :followed_by_count)
在使用范围时,有一些技巧变得有用:merge
trick添加了data_trackings.user_id = a.id
条件,但它没有加入data_trackings
,这就是{{1}的原因必须添加子句,它基本上执行INNER JOIN。其余的非常简单,并且利用from
和order
子句不需要指定表名的事实,如果列在表中是唯一的,或者在SELECT中指定({{ 1}})。
好吧,再次查看时,我可能宁愿定义一个范围来检索给定用户的数据(pluck
记录),该记录本质上会使用您在题。我也可以定义一个帮助器实例方法,用pluck
调用范围,如:
a
然后可以简单地使用:
self