2017-02-21 6 views
0

Я ищу лучший способ получить данные из таблицы баллов. Мне нужно добавить сумму для каждого столбца и добавить ее в объект json.Как оптимизировать сумму для каждого столбца db. Ruby on Rails

Цель состоит в том, чтобы сделать объект JSON, как это ...

data = { 
     labels: ['M', 'Tu', 'W', 'Th', 'F', 'Sa', 'Su'], 
     series: [ 
     [15, 2, 4, 35, 0, 20, 40] // The sum each day from the column NO_OF_ATTEMPTS 
     ] 
    } 

... Из этой таблицы базы данных с именем "десятки" ...

ID | NO_OF_SUCCEEDED | NO_OF_FAILED | NO_OF_ATTEMPTS | UPDATED_AT 
---- | --------------- | ------------ | -------------- | ------------------- 
86 | 19    | 3   | 22    | 2016-09-07 22:25:07 
87 | 18    | 2   | 20    | 2016-09-07 22:25:56 
88 | 31    | 10   | 41    | 2016-12-01 18:20:10 
89 | 14    | 0   | 14    | 2016-09-07 22:21:45 
90 | 16    | 0   | 16    | 2016-09-07 22:24:09 
91 | 17    | 3   | 20    | 2016-09-07 22:43:45 

Банкоматы я написал что-то вроде это ...

data = { 
      labels: [ 
      24.hours.ago.strftime("%A"), 
      Time.now.strftime("%A") 
      ], 
      series: [ 
      [ 
       current_user.scores.where(updated_at: 
        48.hours.ago..24.hours.ago).sum(:no_of_attempts), 
       current_user.scores.where(updated_at: 
        24.hours.ago..Time.now).sum(:no_of_attempts) 
      ] 
      ] 
     } 

Этот код предназначен для каждого дня, чтобы получить сумму NO_OF_ATTEMPTS. 7 дней - 7 запросов к базе данных. Позже я также хочу добавить json-массив с NO_OF_FAILED и NO_OF_SUCCEEDED. Это означает 7 запросов для запроса 3 столбца = 21.

ВОПРОС: Возможно ли это сделать в одном единственном запросе или, по крайней мере, меньше.

ответ

0

Я думаю, что вы можете использовать группу, и суммируют для этого, пожалуйста, найти образец, из которого вы можете достичь его в минимальном запросе

current_user.scores.group («ДАТА (scores.updated_at)»). срывать ("SUM (" scores.no_of_attempts "), где (updated_at:. 168.hours.ago..Time.now)")

не проверял, но мы надеемся работать

Смежные вопросы