@shumi

Как правильно составить запрос?

В общем суть такая:
Есть таблицы 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.
Что-то уже голову сломал =)
Буду рад предложениям.
  • Вопрос задан
  • 2397 просмотров
Пригласить эксперта
Ответы на вопрос 3
viktorvsk
@viktorvsk
Если так описывать проблему, тут тоже все голову сломают.
Хотя бы скиньте связи всех этих моделей.
В чем проблема конкретно ? Вывести все запросы вы можете, дума? DownloadRequest.all
Количество инсталлов на юзера тоже можете? (Непонятно, как оно у вас устроено)
Если без SQL, просто map, select (действия над массивом) - так можете решить задачу? И проблема только в составлении оптимального запроса?
Ответ написан
@Swartalf
а описание таблиц не прилагается? Да и между ними было бы очень хорошо увидеть.

а то по вашему запросу: у меня есть 4(apps, users, download_requests, installs) таблицы, помогите сделать выборку из них как я хочу, но структуру я вам не покажу.
Ответ написан
benjaminsmith
@benjaminsmith
Ruby on Rails developer
У вас не корректно связаны модели

user
has_many :orders #это лучше чем download_requests 
has_many :apps, through: :order #получаем app через order

order
belongs_to :user #связываем юзера с заявкой
belongs_to :app #связываем приложение с заявкой

app
has_many :orders
has_many :users, through: :order #получаем юзеров через order
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы