我有两个表,users
和email_logs
,users
列name
和email
,表email_logs
列email
1}}。我想要做的是从users
表中获取所有电子邮件和名称,如果某个电子邮件已存在于email_logs
表中,则不应该提取它。
我试过了:
$emails_array = 'one@gmail.com, two@gmail.com, three@gmail.com';
$query = $db->query("SELECT name,email FROM ".TABLE_PREFIX."users WHERE email NOT IN ({$emails_array})");
但它没有删除email_logs
表中已存在的电子邮件。
请帮忙!
答案 0 :(得分:3)
SELECT name,email
FROM users WHERE email NOT IN (SELECT email FROM email_logs);
答案 1 :(得分: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
答案 2 :(得分: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' )
答案 3 :(得分:0)
为什么这不起作用的原因是因为您创建了一个查询检查的巨大字符串,而不是创建数组。
相反,请尝试使用此:
$emails_array = array( 'one@gmail.com', 'two@gmail.com', 'three@gmail.com' );
用于定义包含三封电子邮件的字符串:
$email_string = "'" . implode( "', '", $emails_array ) . "'";
最后,运行您的查询
$query = $db->query("SELECT name,email FROM ".TABLE_PREFIX."users WHERE email NOT IN ({$email_string})");