2012-07-31 80 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'))."' 
";