2011-06-15 59 views
0

我有一个基于DataMapper的SQLite数据库。我保存模型制作的数据的时间为Msrun.rawtimeMsrunproperty :rawtime, DateTime如何使用一系列时间来选择DataMapper条目?

我需要做的是在过滤器中选择日期/时间范围,然后根据该时间过滤器对DataMapper条目进行排序。就像这样:

Msrun.all.size # => 63 
matches = Msrun.all(begintime: 2010-11-03T21:33:00-0600, endtime: 2011-04-09T23:59:59-0600) 
matches.size # => 12 

由于我的数据库有这个和子模型之间〜500点的属性,我希望生成〜每月这些条目100,我想的东西是真的快。这是否需要SQL?这可能吗?我是否比它应该更难/是否有更简单的方法来配置我的数据以启用此类排序?

回答

1

我不确定你想要做什么?如果您想查询特定开始和结束时间之间发生的项目,你可以使用:

Mrsun.all(:rawtime => start_time..end_time) 

这将生成SQL像

SELECT ... FROM msruns WHERE rawtime > start_time AND rawtime < end_time; 

是否回答你的问题?

更全面的例子:

require 'rubygems' 
require 'dm-core' 
require 'dm-migrations' 


# setup the logger 
DataMapper::Logger.new($stdout, :debug) 

# connect to the DB 
DataMapper.setup(:default, 'sqlite3::memory:') 

class Msrun 
    include DataMapper::Resource 

    # properties 
    property :id, Serial 
    property :rawtime, DateTime 

end 

DataMapper.finalize.auto_migrate! 


10.times do |n| 
    Msrun.create(:rawtime => DateTime.new(2011, 1, 1, 0, 0 , n)) 
end 

p Msrun.all(:rawtime => DateTime.parse('2011-1-1T00:00:04+0100')..DateTime.parse('2011-1-1T00:00:07+0100')) 
+0

虽然这句法有一定道理,这是我欣赏,这不的东西,有DataMapper的日期时间的属性值工作。任何与该班级合作的建议? – Ryanmt 2011-06-15 21:14:33

+0

它适用于DateTime:请参阅编辑。 – namelessjon 2011-06-15 21:22:38

+0

太好了。我知道比较不会奏效,但我不知道如何实现。谢谢! – Ryanmt 2011-06-15 21:37:22

相关问题