RoR: подсчет записей за день при запросе даты и времени - PullRequest
2 голосов
/ 29 августа 2011

За последние 15 дней я пытаюсь создать цикл для подсчета количества записей за каждый день.

Таким образом, @records должен быть массивом подсчетов за последние 15 дней.

Однако в записи хранятся даты как дата-время (как вы знаете), и я пытаюсь ссылаться на любое время в течение одного дня.

@records = []

      15.times do |i|
        bar =  Records.all.count( 
          :type => 'large',
          :created_at => ((i-1).days.ago..i.days.ago)
          )
        @records << bar
      end

Мысли? Спасибо!

Ответы [ 2 ]

8 голосов
/ 29 августа 2011
Record.where("date(created_at) > ?", 15.days.ago).group("date(created_at)").count

должен давать количество записей по дням.

Пример вывода:

 {"2011-07-02"=>4,
 "2011-07-04"=>5,
 "2011-07-05"=>16,
 "2011-07-06"=>12,
 "2011-07-11"=>19}
1 голос
/ 29 августа 2011

Вы можете использовать SQL для подсчета без создания большого количества Record объектов (которые используют память / время)

ActiveRecord::Base.connection.select_rows('SELECT DATE(created_at) AS d, COUNT(*) AS c FROM my_records_table GROUP BY DATE(created_at)')

Это даст вам массив массивов:

> pp ActiveRecord::Base.connection.select_rows('SELECT DATE(created_at) AS d, COUNT(*) AS c FROM my_records_table GROUP BY DATE(created_at)')
[["2011-06-23", "326"],
 ["2011-06-24", "337"],
 ["2011-06-25", "334"],
 ["2011-06-26", "353"],
 ["2011-06-27", "210"],
 ["2011-06-28", "330"],
 ["2011-06-29", "331"],
 ["2011-06-30", "338"],
 ["2011-07-01", "335"],
 ["2011-07-02", "366"],
 ["2011-07-03", "320"],
 ["2011-07-04", "338"],
 ["2011-07-05", "338"],
 ["2011-07-06", "299"],
 ["2011-07-07", "326"],
 ["2011-07-08", "314"],
 ["2011-07-09", "331"],
 ["2011-07-10", "335"],

... но я только что видел ответ Декстера, и это НАИЛУЧШЕ лучше:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...