2009-05-08 5 views
0

Ich habe ein Problem sehr ähnlich dem, das hier in ausgesetzt ist.ActiveRecord MySQL und JOINS

Diese Abfrage:

Client.all :joins => :orders, 
      :conditions => { :orders => {:created_at => time_range}} 

sollten alle Kunden mit ihren Bestellungen zurück, wenn sie einige Aufträge im Zeitbereich gemacht. Habe ich recht?

Was ich will ist etwas anders: Ich möchte alle Kunden, ob sie eine Bestellung gemacht haben oder nicht im Zeitbereich. Wenn sie etwas bestellt haben, möchte ich sie trotzdem haben. Ich kam mit, dass bis:

Client.all :joins => 'LEFT OUTER JOIN orders ON orders.client_id = clients.id', 
      :conditions => {:orders => {:created_at => time_range}}) 

Aber das gibt mir nicht die Kunden, die eine Bestellung nicht geschafft haben ... Kann mir jemand dabei helfen?

Antwort

1

ich denke, das wird es tun:

Client.all :joins => 'LEFT OUTER JOIN orders ON orders.client_id = clients.id', 
     :conditions => ['orders.created_at IN (?) OR orders.id IS NULL', time_range] 
+0

Aber nicht, dass Betrug ist ... Lassen Sie mich es versuchen?. –

+0

Das hat funktioniert;) Thx ... –

+0

Ich weiß nicht, wie man OR-Bedingungen in AR ohne ein Plugin oder die Abfrage von Hand schreiben. Vielleicht habe ich etwas auf dem Weg verpasst. –