В общем суть такая:
Есть таблицы apps, users, download_requests, installs
Т.е. есть приложения, юзер может подать запрос на скачивание приложения (user has_many download_requests).
После подтверждения, создается install , в котором хранится user и app (install belongs_to user , install belongs_to app).
app has_many installs
user has_many installs
user has_many download_requests
---
Теперь что мне требуется.
Вывести все запросы на скачивание плюс для каждого запроса максимальное количество инсталлов у юзера по какому-либо из приложений.
Мне нужно сделать это одним запросом, использую актив рекорд это реализовал, но выходит очень медленный запрос.
Конкретно проблема в том, что нужно к выборке DownloadRequests.all для кажого добавить грубо говоря поле max_installs_count_for_any_app.
Что-то уже голову сломал =)
Буду рад предложениям.
Если так описывать проблему, тут тоже все голову сломают.
Хотя бы скиньте связи всех этих моделей.
В чем проблема конкретно ? Вывести все запросы вы можете, дума? DownloadRequest.all
Количество инсталлов на юзера тоже можете? (Непонятно, как оно у вас устроено)
Если без SQL, просто map, select (действия над массивом) - так можете решить задачу? И проблема только в составлении оптимального запроса?
app has_many installs
user has_many installs
user has_many download_requests
Мне нужно сделать это одним запросом, использую актив рекорд это реализовал, но выходит очень медленный запрос.
Конкретно проблема в том, что нужно к выборке DownloadRequests.all для кажого добавить грубо говоря поле max_installs_count_for_any_app.
Так понятней? Извиняюсь, просто запарился за день.
Хорошее решение - использовать counter_cache. Добавление такого поля - это хорошо, а не плохо. Зря вам такой вариант не нравится :) вот источник: railscasts.com/episodes/23-counter-cache-column
Конечно, можно составить запрос, что бы mysql на ходу считал количество каждой ассоциации. Но по смыслу, это немногим лучше сортировки уже средствами ruby
а описание таблиц не прилагается? Да и между ними было бы очень хорошо увидеть.
а то по вашему запросу: у меня есть 4(apps, users, download_requests, installs) таблицы, помогите сделать выборку из них как я хочу, но структуру я вам не покажу.