2012-07-31 7 views
0

Je suis relativement nouveau dans les requêtes SQL et j'ai de la difficulté à effectuer une requête sur une base de données déjà en cours d'exécution.Requête SQL SELECT pour deux valeurs dans le même champ

Je dois lancer deux requêtes, d'abord pour vérifier qui s'est inscrit il y a 3 jours et n'a pas passé de commandes et n'a pas reçu d'e-mail lui donnant une offre. Cela fonctionne très bien.

La requête suivante consiste à vérifier qu'un client s'est inscrit il y a 7 jours, n'a effectué aucune commande et a reçu l'e-mail de 3 jours. Je peux l'obtenir pour faire cela mais je dois aussi vérifier qu'ils n'ont pas déjà reçu le deuxième email et c'est la partie qui me déroute. Même lorsque le client a été envoyé le 2 e-mail lorsque je lance la requête à nouveau, ils apparaissent toujours.

$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'))."' 
"; 

Les deux codes de réduction sont 1 pour le premier courrier électronique (5% de réduction) et de 2 pour le deuxième courriel (10% de réduction) qui est la valeur I essaie de vérifier que la base de données est à l'intérieur.

Je cours la requête en PHP. Toute aide serait reconnaissante.

Merci d'avance.

+0

Pouvez-vous ajouter quelques exemples de données? –

+0

'1' <> '2' pour toutes les valeurs de '1'. – wildplasser

+0

@wildplasser Que voulez-vous dire par '1' <> '2' pour toutes les valeurs de '1'? Désolé pour ça. –

Répondre

0

Exclure "LEFT OUTER JOIN automated_email_discount" et les conditions de cette table de requête et ajouter la condition suivante:

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

Voici la déclaration finale:

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'))."' 
"; 
Questions connexes