Ruby on rails 从数据库获取与今天、昨天、今天-1.5周、今天-1.5个月相关的数据
我有一个对象和一个结果表Ruby on rails 从数据库获取与今天、昨天、今天-1.5周、今天-1.5个月相关的数据,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个对象和一个结果表 对象有很多结果 结果属于对象 结果有一列名为kg 我需要为每个对象获取kg数据 where('DATE(created_at) = ?' Date.today AND Date.today - 1.day AND Date.today - 1.week AND Date.today - 1.month) 所以我的问题是,哪一个是我最好的选择: 获取1个月的所有记录(日期介于今天和今天之间-1个月),然后获取今天、昨天、1周前和1个月前的结果) 或者进行4次查询并
- 对象有很多结果
- 结果属于对象
kg
我需要为每个对象
获取kg
数据
where('DATE(created_at) = ?' Date.today AND Date.today - 1.day AND Date.today - 1.week AND Date.today - 1.month)
所以我的问题是,哪一个是我最好的选择:
today = result.where('DATE(created_at) = ?' Date.today)
y = result.where('DATE(created_at) = ?' Date.today - 1.day)
w = result.where('DATE(created_at) = ?' Date.today - 1.week)
m = result.where('DATE(created_at) = ?' Date.today - 1.month)
您应该能够在请求中构建一个
result.where('DATE(created_at) IN (?)', [Date.today, Date.today - 1.day])
它将检索在所提供日期之间的记录。根据您以后希望如何使用结果,使用第二种方法单独查询它们可能是有意义的。这样,您就不必在结果集中进一步分离它们
如果在第一种方法中实际上不需要查询的数据,那么从数据库中检索这些数据是没有意义的。然后,您应该使用另一种更具体的方法
如果您的实际查询比问题中显示的查询更复杂,或者您只需要一个结果集,那么使用以下只需要一个查询的方法可能是有意义的:
dates = [
Date.today,
Date.today - 1.day,
Date.today - 1.week,
Date.today - 1.month
]
resultset = Result.where('DATE(created_at) IN (?)', dates)
此查询将生成类似以下内容的SQL查询:
SELECT * from results WHERE DATE(created_at) IN ('2013-12-16', '2013-12-15', '2013-12-09', '2013-11-16');
在确切日期(例如2周前)未创建的结果如何。它们将包含在第一个示例中,但不包含在第二个示例中。此外,Object
是Ruby中现有的类,几乎是所有其他类的父类。您不应该使用它来表示业务逻辑(尤其不是作为ActiveRecord类)。我的表有不同的名称,为了回答您的第一个问题,我不需要任何其他日期。因此,我的问题是哪个选项更好,带I query的选项加载更多记录,或者4个查询,每个查询只加载一行。IN
查询中的不是介于之间的查询。结果集将只包含在确切日期创建的结果(不是它们之间的结果)。是的,但是如果你仔细阅读他的问题,他要找的是
中的一个,而不是
之间的一个。这是正确的。但是,您的答案看起来好像在
中作为中的值给出的值实际上被评估为介于
之间的。这是我发表评论的唯一原因:)
SELECT * from results WHERE DATE(created_at) IN ('2013-12-16', '2013-12-15', '2013-12-09', '2013-11-16');