0

我对 SQL 查询相当陌生,并且在对已经运行的数据库执行查询时遇到了麻烦。

我需要运行两个查询,首先检查谁在 3 天前注册并且没有下任何订单并且没有收到给他们提供报价的电子邮件。这很好用。

下一个查询是检查客户是否在 7 天前注册,没有下任何订单并收到 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% 折扣)和第二封电子邮件(10% 的折扣)的 2,这是我要检查的数据库中的值。

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

提前致谢。

4

1 回答 1

0

从查询中排除“LEFT OUTER JOIN automatic_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'))."'
";
于 2012-07-31T12:47:17.643 回答