2013-12-13 64 views
0

我有兩個表,usersemail_logsusers有列nameemail和表email_logs有列email。我想要做的是從users表中獲取所有電子郵件和名稱,如果某個電子郵件已存在於email_logs表中,則不應提取它。刪除某些詞從MySQL結果

我嘗試這樣做:

$emails_array = '[email protected], [email protected], [email protected]'; 
    $query = $db->query("SELECT name,email FROM ".TABLE_PREFIX."users WHERE email NOT IN ({$emails_array})"); 

但它並沒有在email_logs表中刪除那些已經存在的郵件。

請幫忙!

+1

的電子郵件將不得不封閉在引用中,如果你使用'NOT IN'。試試'$ emails_array =''[email protected]','[email protected]','[email protected]'「;'。 –

回答

3
SELECT name,email 
FROM users WHERE email NOT IN (SELECT email FROM email_logs); 
+0

這是一個了不起的答案!感謝Tin Tran :) – user2854563

0
SELECT u.name,u.email FROM users u 
LEFT JOIN email_logs as e ON u.email = e.email 
WHERE e.email is not null 
0
$emails_array = "'apple', 'banana', 'coconut'"; 

SELECT u.name, u.email FROM users u 
WHERE u.email NOT IN ({$emails_array}) 

IN使用有誤。 每個字符串/電子郵件應該用引號括起來,如:

WHERE u.email NOT IN ('apple', 'banana', 'coconut')

0

的原因,爲什麼這是行不通的,因爲,而不是創建一個數組,創建針對哪一個巨大的字符串查詢檢查。

相反,嘗試使用這樣的:

$emails_array = array('[email protected]', '[email protected]', '[email protected]'); 

用於定義與三封郵件的字符串:

$email_string = "'" . implode("', '", $emails_array) . "'"; 

最後,運行查詢

$query = $db->query("SELECT name,email FROM ".TABLE_PREFIX."users WHERE email NOT IN ({$email_string})");