Essayer d'obtenir des données de la manière la plus efficace possible pour certains rapports, en utilisant Rails 2.3 et MySQL.Rails - Tirer et calculer efficacement des données sur plusieurs relations
Notre application a des utilisateurs, des offres et des achats. Les relations ressemblent à ceci:
class User
has_many :purchased_deals
has_many :deals, :through => :purchased_deals
end
class Deal
has_many :purchased_deals
has_many :users, :through => :purchased_deals
end
class PurchasedDeal
belongs_to :deal
belongs_to :user
end
Pour le rapport, je suis en cours d'exécution, je dois obtenir tous les utilisateurs qui ont effectué un achat (c.-à au moins un PurchasedDeal), puis la somme totale de toutes les offres qu'ils avoir acheté (le prix est attaché à la transaction, pas le PurchasedDeal).
Certainement, je pourrais commencer avec une liste de tous les utilisateurs, y compris les offres et les offres achetées. J'ai essayé cela, et la requête est massive (30 000 utilisateurs, donner ou prendre, 3 000 affaires, plus de 100 000 offres achetées).
Je pourrais commencer avec les utilisateurs, puis faire un .each et de trouver ceux qui ont un deal acheté, les diviser en leur propre groupe, puis itérer sur chacun des ceux pour obtenir le montant total acheté, mais c'est une bonne quantité de requêtes.
Actuellement, ces deux méthodes prennent tellement de temps que les demandes arrivent à expiration. Quel serait le moyen le plus efficace d'obtenir les données dont j'ai besoin? Ajouter des colonnes aux tables est une solution totalement acceptable, btw. J'ai un accès complet à la base de données pour faire ce dont j'ai besoin.
Merci!
Lorsque j'essaie d'exécuter votre première instruction, cela renvoie une erreur mysql à propos de "count_all" étant une colonne inconnue. –
Mon mauvais, cela aurait dû être ': avoir', plutôt que': conditions'. Fixé. –
Comment trier/commander à nouveau user_id_to_price? le genre! La méthode me donne une erreur sans méthode (c'est un OrderedHash). –