Как я могу использовать диапазон времени для выбора записей DataMapper? - PullRequest
0 голосов
/ 16 июня 2011

У меня есть база данных SQLite на основе DataMapper.Я храню время, в которое данные, на которых построена модель, составляет Msrun.rawtime или property :rawtime, DateTime Модели Msrun.

Что мне нужно сделать, это выбрать диапазон даты / времени в фильтре, а затем отсортировать записи 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 Ответ

1 голос
/ 16 июня 2011

Я не уверен, что ты хочешь сделать? Если вы хотите запросить элементы, которые происходят между определенным временем начала и окончания, вы можете использовать:

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...