我在rails 2.3中运行MySQL数据库。我在此查询中与之交互的模型关联如下:
模型:用户和订单
用户有1封电子邮件
用户有很多订单
订单已在日期创建
我想列出所有用户的电子邮件列表,这些用户至少有一个订单,最新订单至少3个月(所以,我们今天说的是2012年2月24日,最后一个订单于2011年11月24日或之前发布)
我知道如何使用此查询获取在11月11日或之前创建的订单:
SELECT * FROM orders WHERE created_at <= "2011-11-24 00:00:00.000000 -08:00"
我不知道如何查找至少有1个订单的用户并且每个订单都有这些条件。
非常感谢任何帮助!
答案 0 :(得分:1)
我有另一个答案。我刚刚注意到你正在使用rails 2.3
在这种情况下,也许:
User.all.orders(:conditions => ["created_at > ?", Time.now - 3.months])
将订单作为默认范围放入订单模型中,例如
default_scope :order_by => 'created_at'
语法可能需要一些工作,因为我主要使用带有AREL语法的Rails 3
答案 1 :(得分: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
答案 2 :(得分: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