0

私は SQL クエリにかなり慣れていないので、既に実行中のデータベースでクエリを実行するのに問題があります。

2 つのクエリを実行する必要があります。最初に、3 日前にサインアップし、注文を行っておらず、オファーを提供する電子メールを受け取っていないユーザーを確認します。これはうまくいきます。

次のクエリは、顧客が 7 日前にサインアップし、注文を行っておらず、3 日間の電子メールを受け取っていることを確認することです。私はそれを行うことができますが、2 番目の電子メールをまだ受け取っていないことも確認する必要があり、これが私を混乱させている部分です。顧客に 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'))."'
";

2 つの割引コードは、最初のメールの 1 (5% 割引) と 2 番目のメールの 2 (10% 割引) です。これは、データベース内にあることを確認しようとしている値です。

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 に答える