Rails / Mysql复合连接和Query所在的位置

时间:2012-07-20 09:34:29

标签: mysql ruby-on-rails join where

嘿,我被这个问题困扰了,并且已经考虑过了,似乎无法把头放在上面。

我有三张桌子,账号,供应商和分数

一个帐户有很多供应商,供应商有很多分数。

我想要做的是显示在与帐户相关的两周内更改或创建的所有分数。我不想拉整个数据库,因为它有超过200万行代码所以我想让计算由sql执行。

问题是制作一个清晰的sql语句。

这是我的想法。

sql=""
scores = ActiveRecord::Base.connection.execute(sql)
@scorecards = []
@scorecards {|sc| sc << scores}

这样我就可以将所有结果保存在一个数组中,并且无法从那里使用它们。

我的sql语句如下所示:

SELECT * FROM sms_development.scores WHERE DATE(created_at) = CURDATE() - INTERVAL 14 DAY AND CURDATE() OR DATE(updated_at) = CURDATE() - INTERVAL 14 DAY AND CURDATE();

现在这里我很困惑我必须为每个记分卡运行此语句,然后将其与供应商表中的score_id匹配,然后将供应商ID与accounts表中的suppliers_id匹配。

在SQL查询中完成此操作的最佳方法是什么?对不起,如果它是一个简单的问题,我是MySQL的新手。这看起来好像很毛茸茸。

1 个答案:

答案 0 :(得分:1)

我会让rails为你处理这个问题。

为您的帐户模型添加has_many :scores, :through => :suppliers,为您的分数模型添加belongs_to :account,然后使用以下方式加载分数:

Scores = @account.scores.where("created_at > ? Or updated_at > ?", 2.weeks.ago, 2.weeks.ago)