2012-11-10 22 views
0
SELECT users.email FROM users 
INNER JOIN orders 
ON orders.user_id = users.id 
WHERE orders.status = 'new' 
AND orders.date_created > three months back? 

我想抓取所有用户在未来3个月内未在我的网站上下单的电子邮件。所以,如果3个月内没有订单,请抓住电子邮件。MySQL:在三个月内抓取并且没有抓取行

date_created是类型TIMESTAMP。所以一个例子是:2012-11-10 23:54:20

另外我想要一个查询抓取用户的电子邮件谁没有做任何订单(订单表中没有行)?

我试着用:

SELECT users.email FROM users 
    WHERE users.id NOT IN (select user_id from orders where user_id = users.id and orders.status = 'new') 

但似乎抢用命令的用户呢?

回答

1
  1. 我想抓住那些尚未从今天起3个月内我的网站上作出的命令,所有用户的电子邮件。

    集团的订单由用户和过滤结果为那些最近的订单超过3个月前:

    SELECT users.email 
    FROM  users JOIN orders ON orders.user_id = users.id 
    GROUP BY orders.user_id 
    HAVING MAX(orders.date_created) < CURRENT_DATE - INTERVAL 3 MONTH; 
    
  2. 此外,我想一个查询抓住用户的电子邮件谁根本没有任何订单(订单表中没有行)?

    做一个外连接和过滤器落在路口以外记录:

    SELECT users.email 
    FROM  users LEFT JOIN orders ON orders.user_id = users.id 
    WHERE orders.user_id IS NULL