0

嘿,我被这个问题难住了,仔细考虑了一下,似乎无法接受。

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

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

我想做的是显示与帐户相关的两周内已更改或创建的所有分数。我不想拉整个数据库,因为它有超过 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 与帐户表中的供应商 ID 匹配。

在 SQL 查询中完成此任务的最佳方法是什么?抱歉,如果这是一个简单的问题,我是 MySQL 新手。这似乎会变得多毛。

4

1 回答 1

1

我会让rails为你处理这个。

将 a 添加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 回答