0

こんにちは、私はこのクエリに困惑しており、よく考えてみましたが、頭を悩ませているようには見えません。

アカウント、サプライヤー、スコアの 3 つのテーブルがあります

アカウントには多くのサプライヤーがあり、サプライヤーには多くのスコアがあります。

私がやりたいことは、2 週間以内に変更または作成されたアカウントに関連するすべてのスコアを表示することです。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 をアカウント テーブルのsuppliers_id と照合する必要があることに混乱しています。

SQLクエリ内でこれを達成する最良の方法は何ですか?? 簡単な質問で申し訳ありませんが、私はMySQLを初めて使用します。これは毛むくじゃらになるようです。

4

1 に答える 1

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)
于 2012-07-20T09:40:46.937 に答える