Der Versuch, mit Rails 2.3 und MySQL für einige Berichte möglichst effiziente Daten zu erhalten.Rails - Effizientes Ziehen und Berechnen von Daten über mehrere Beziehungen hinweg
Unsere App verfügt über Benutzer und Deals und PurchasedDeals. Beziehungen wie folgt aussehen:
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
Für den Bericht Ich laufe, ich brauche alle Benutzer zu erhalten, die einen Kauf getätigt haben (dh mindestens eine PurchasedDeal) und dann die Summe aller Angebote, die sie gekauft haben (der Preis ist dem Deal beigefügt, nicht der PurchasedDeal).
Natürlich könnte ich mit einer Liste aller Benutzer beginnen, einschließlich sowohl Deals und gekauften Deals. Ich habe das versucht, und die Abfrage ist massiv (30.000 Benutzer geben oder nehmen, 3.000 Angebote, 100.000 gekaufte Angebote).
ich mit Benutzern beginnen könnte, dann ein .each tun und diejenigen finden, die eine gekaufte Geschäft haben, teilen sie in ihre eigene Gruppe, und dann über die jeweils jene iterieren die gesamte gekaufte Menge zu bekommen, aber Das ist eine Menge Anfragen.
Derzeit dauern beide Methoden so lange, dass die Anforderungen überschritten werden. Was wäre der effizienteste Weg, um die Daten zu bekommen, die ich brauche? Das Hinzufügen von Spalten zu Tabellen ist eine völlig akzeptable Lösung, zwischenzeitlich. Ich habe vollen Datenbankzugriff, um zu tun, was ich brauche.
Danke!
Wenn ich versuche, Ihre erste Anweisung auszuführen, wird ein mysql-Fehler zurückgegeben, da "count_all" eine unbekannte Spalte ist. –
Mein schlechtes, das hätte sein sollen: "haben", anstatt "Bedingungen". Fest. –
Wie würde ich user_id_to_price sortieren/nachbestellen? die Art! Methode gibt mir keinen Methodenfehler (es ist ein OrderedHash). –