2012-07-20 105 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