статистика по созданным моделям

0

Я пытаюсь найти эффективный способ предоставить данные для построения графика script jqplot количества кликов на определенной модели

У меня есть основная модель: Листинг has_many кликов каждый клик имеет дату как я могу получить количество кликов, созданных за каждый день в диапазоне дат?

2 ответа

0
date_from = Date.parse '2010-06-01'
date_to = Date.parse '2010-07-01'
click_counts = (date_from..date_to).map{|date|
  [date, Click.count(:conditions => {:date_stamp => date})]
}

возвращает массив из [date, count] пар за данный период. Однако это вызовет запрос базы данных для каждого дня в диапазоне дат.

Одним из распространенных решений для решения таких запросов является создание таблицы базы данных, заполненной всеми датами (например, в течение предыдущих и последующих 10 лет), а затем выполнить JOIN, похожее на:

SELECT d.date, COUNT(c.date_stamp)
FROM dates d
LEFT JOIN clicks c ON d.date = c.date_stamp
GROUP BY d.date

который вернет все количество кликов в одном запросе.

Или, в качестве третьего решения, вы можете получить количество кликов для существующих дат:

Click.find(:all,
  :select => "date_stamp, count(*) as count",
  :group => 'date_stamp',
  :conditions => ["date_stamp >= ? and date_stamp < ?", date_from, date_to])

и добавьте "пустые" дни в Ruby.

-2
def number_of_clicks
    start_date = Date.strptime(params[:start_date],"%d/%m/%Y")
    end_date = Date.strptime(params[:end_date],"%d/%m/%Y") 
    options = {conditions = ["date_stamp > ? and date_stamp < ?", start_date, end_date}
    Listing.find(:all, options).size
 end
  • 0
    Я думаю, что ОП хочет количество кликов за день в диапазоне. Кроме того, выполнение find а затем size является неоптимальным, поскольку все данные должны быть переданы в приложение и подсчитаны там, в отличие от подсчета, выполняемого БД с использованием метода count .
  • 0
    хорошо, спасибо за объяснение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню