嘿,我被这个问题难住了,我想了想,但似乎无法全神贯注。
我有三个表,帐户、供应商和分数
一个帐户有多个供应商,一个供应商有多个分数。
我想要做的是显示两周内与帐户相关的所有已更改或创建的分数。我不想拉动整个数据库,因为它有超过 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 与帐户表中的 sellers_id 相匹配。
在 SQL 查询中完成此操作的最佳方法是什么?抱歉,如果这是一个简单的问题,我是 MySQL 新手。这看起来可能会变得毛茸茸的。
最佳答案
我会让 Rails 为你处理这个问题。
将 has_many :scores, :through => :suppliers
添加到您的帐户模型,并将 belongs_to :account
添加到您的分数模型,然后使用以下方式加载分数:
Scores = @account.scores.where("created_at > ? Or updated_at > ?", 2.weeks.ago, 2.weeks.ago)
关于mysql - Rails/Mysql 复杂连接和 where 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576697/