2012-07-20 118 views
0

嘿所有我被这个查询难住,并认为它结束了,似乎不能把我的头。Rails/Mysql复杂的加入和查询

我有三个表,账户,供应商和分数

的帐户有许多供应商和供应商有很多的分数。

我想要做的是显示所有在两周内与账户相关的更改或创建的分数。我不想拉整个分贝,因为它有超过200万行的代码,所以我想离开的计算由SQL预制。

麻烦的是做出了明确的sql语句。

这是我的想法。

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

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

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(); 

这里是我在哪里confussed我要运行这个语句给每个记分卡,然后将其与在供应商表中的score_id,然后匹配的供应商:

我的SQL语句如下所示id到accounts表中的suppliers_id。

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

回答

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) 
+0

非常酷我不知道,你可以有这样的条件。你今天教了我一件很棒的好东西! – TheLegend 2012-07-20 09:52:27

+0

很高兴我能帮忙! – Ryan 2012-07-24 22:50:03