2012-07-31 53 views
0

内的两个值我是相当新的SQL查询和我有麻烦已在运行的数据库执行查询。SQL SELECT查询同一领域

我需要运行两个查询,首先要检查谁已经4天前签约,并没有作出任何的订单并没有receieved电子邮件给他们的报价。这很好。

下一个查询是检查客户已签署了8天前,没有作出任何订单,并已receieved 3天的电子邮件。我可以做到这一点,但我也需要检查他们还没有收到第二封电子邮件,这是令我困惑的部分。即使当我再次运行查询时,客户已经发送了2封电子邮件,他们仍然出现。

$sql = " 
    SELECT c.customerID, c.email, c.forename, c.date 
     FROM customers c 
     LEFT OUTER JOIN orders_headers o ON o.customerID=c.customerID 
     LEFT OUTER JOIN no_order_mail_sent m ON m.customerID=c.customerID 
     LEFT OUTER JOIN automated_email_discount e ON e.customerID=c.customerID 
    WHERE m.customerID IS NULL 
     AND o.customerID IS NULL 
     AND e.customerID IS NOT NULL 
     AND e.discount_code_id='1' 
     AND e.discount_code_id!='2' 
     AND STR_TO_DATE(c.date, '%Y%m%d') ='".date('Y-m-d', strtotime('-'.$days.'days'))."' 
"; 

两个折扣代码是1第一电子邮件(5%的折扣)和2用于第二电子邮件(10%的折扣),这是我试图以检查是在数据库中的值。

我运行PHP中的查询。任何帮助将不胜感激。

在此先感谢。

+0

你可以添加一些样本数据? – 2012-07-31 09:47:39

+0

'1'<>'2'表示所有值为'1'。 – wildplasser 2012-07-31 09:51:51

+0

@wildplasser对于所有'1'的值,'1'<>'2'是什么意思?对不起,这是新的。 – 2012-07-31 09:55:02

回答

0

排除 “LEFT OUTER JOIN automated_email_discount”,并从查询该表的条件,并添加以下条件:

And c.customerID not in (select customerID from automated_email_discount where discount_code_id='2') 

这里是最后的陈述:

SELECT c.customerID, c.email, c.forename, c.date 
     FROM customers c 
     LEFT OUTER JOIN orders_headers o ON o.customerID=c.customerID 
     LEFT OUTER JOIN no_order_mail_sent m ON m.customerID=c.customerID 
    WHERE m.customerID IS NULL 
     AND o.customerID IS NULL 
     And c.customerID not in (select customerID from automated_email_discount where discount_code_id='2') 
     AND STR_TO_DATE(c.date, '%Y%m%d') ='".date('Y-m-d', strtotime('-'.$days.'days'))."' 
";