我有一个基于DataMapper的SQLite数据库。我将建立模型的数据的时间存储为模型Msrun.rawtime
的{{1}}或property :rawtime, DateTime
。
我需要做的是在过滤器中选择日期/时间范围,然后根据该时间过滤器对DataMapper条目进行排序。像这样:
Msrun
由于我的数据库在这个和子模型之间有大约500个属性,并且我希望每月生成大约100个这样的条目,我想要的东西也非常快。这会需要SQL吗?这可能吗?我是否比实际应用更难/是否有更简单的方法来配置我的数据以启用此类排序?
答案 0 :(得分:1)
我不确定你想做什么?如果要查询在特定开始时间和结束时间之间发生的项目,可以使用:
Mrsun.all(:rawtime => start_time..end_time)
这将生成类似
的SQLSELECT ... 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'))