2012-02-24 76 views
0

我正在rails 2.3中運行MySQL數據庫。是,我在此查詢交互我的模型關聯如下:sql - 查找至少有1個訂單的用戶,並且對每個訂單都有條件。使用次數?

模式:用戶和訂單

用戶1個電子郵件

用戶有很多訂單

訂單已經一個在創建日期

我想打誰從至少有一個爲了與最新的順序爲至少3個月的所有用戶(所以,可以說,今天的電子郵件列表是2月24日日2012年,最後一個訂單于2011年11月24日或更早)

我知道如何抓住或與此查詢年11月24之前創建的訂單:

SELECT * FROM orders WHERE created_at <= "2011-11-24 00:00:00.000000 -08:00" 

我不知道怎麼找至少有一個訂單的用戶,並且每個訂單都有這些條件。

任何幫助將不勝感激!

+0

哪些表的定義? – 2012-02-24 18:06:30

回答

1
SELECT users.email 
FROM users 
    JOIN 
    (SELECT user_id, MAX(created_at) AS created_at 
     FROM orders 
     GROUP BY user_id 
     HAVING MAX(created_at) < CURDATE() - INTERVAL 3 MONTH 
    ) AS oo 
    ON oo.user_id = users.id 
ORDER BY oo.created_at DESC 
+0

謝謝,這個伎倆。 – Zyren 2012-02-24 18:35:08

0
SELECT users.email 
FROM orders, users 
WHERE orders.user_id = users.id 
AND orders.created_at < CURDATE() - INTERVAL 3 MONTH 
ORDER BY orders.created_at DESC 
+0

謝謝,這做了我想要完成的。我在開頭添加了一個DISTINCT,因此電子郵件不再重複。 – Zyren 2012-02-24 18:14:47

+0

其實,這個答案是否確保所有訂單都至少3個月大?我看到電子郵件是我最近訂購的客戶。 – Zyren 2012-02-24 18:22:23

+0

這看起來不正確。 '''表示在過去3個月內的訂單將被選中,不會比以前大。 – 2012-02-24 18:22:58

1

我有另一個答案。我剛纔注意到您在使用Rails 2.3

在這種情況下,也許:

User.all.orders(:conditions => ["created_at > ?", Time.now - 3.months]) 

通過把順序爲默認範圍,您的訂單模式,例如

default_scope :order_by => 'created_at' 

語法可能需要一點點的工作,因爲我主要使用的Rails 3與AREL語法

+0

雖然這可能會工作,但我想嚴格保持SQL查詢。當它不是必不可少的時候,我也不想改變模型。 – Zyren 2012-02-24 18:38:39

+0

這很好。儘管如此,我仍然建議在軌道上做。在rails應用程序中使用大量的sql是一種主要的代碼異味。 – 2012-03-06 03:34:51

相關問題