我是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%折扣)和第二封电子邮件的2(10%折扣),这是我试图检查的数据库中的值。
我正在用PHP运行查询。任何帮助都将不胜感激。
提前谢谢。
从查询中排除此表的"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'))."'
";