2010-03-12 45 views
0

我有一個查詢,得到誰訂閱電子報審這將持續30天電子郵件列表..
MYSQL - 查詢要檢查其他表(很難解釋......)

$thirty = time() - 3024000; 

SELECT c.email 
    FROM tbl_clients AS c 
    JOIN tbl_clientoptions AS o ON o.client = c.id 
WHERE o.option = 'newsletter' 
    AND c.datecreated > $thirty 

我想要做的是在同一個查詢中進行檢查,如果它們有tbl_clientoptions.option ='trialoverride'(即;客戶端選項表中的值爲「trialoverride」的行),它也會返回超過30天的客戶端。

TBL_CLIENTS表:

  • ID
  • 電子郵件
  • dateCreated會

TBL_CLIENTOPTIONS表:

  • ID
  • 客戶
  • 選項
+0

聽起來像是你想到'UNION'兩個選擇語句在一起,第二個與TBL_CLIENTOPTIONS – 2010-03-12 02:43:57

+0

聯接,選項表具有類似時事通訊,宣傳材料,smsalerts,monthlynewsletter等等的東西,並且還有一個用於trialoverride的選項。 有多行取決於打勾的選項。如果有客戶使用簡訊和短信提醒,則會有兩行。如果我們解決某些問題,則會刪除一行。 我想要做的是選擇所有有「新聞通訊」選項並且不到30天的人,如果有'試驗超越'選中,那麼所有擁有'通訊'的人都打勾超過30天。 我可以做兩個查詢,但希望在一個.. – Sam 2010-03-12 03:37:37

回答

0

如何:

SELECT c.email 
    FROM tbl_clients AS c JOIN tbl_clientoptions AS o 
    ON o.client = c.id 
    WHERE (o.option = 'newsletter' AND c.datecreated > $thirty) 
    || o.option = 'trialoverride'; 
+0

我想我試過這個,但它與另一個'選項'列(即:行不能等於'通訊'和'trialoverride'在同一時間)這是正確的嗎? – Sam 2010-03-12 02:46:49

+0

對不起,沒有看到。我已經編輯它到我認爲應該工作,而不是。基本上,將()稍微移動一下。 – catfarm 2010-03-12 02:52:03

0

通常只是一個OR條件將做到這一點,增加了DISTINCT如果同一用戶的用戶可以有兩種情況,否則將其刪除:

SELECT DISTINCT c.email 
FROM tbl_clients c 
INNER JOIN tbl_clientoptions o ON (o.client = c.id) 
WHERE 
(o.option = 'newsletter' AND c.datecreated < $thirty) OR 
(o.option = 'trial override' AND c.datecreated > $thirty);