从MySQL结果中删除某些单词


Remove Certain Words From MySQL Result

我有两个表,usersemail_logsusers有列nameemailemail_logs有列email。我想做的是从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表中已经存在的电子邮件。

请帮忙!

SELECT name,email
FROM users WHERE email NOT IN (SELECT email FROM email_logs);
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
$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' )

之所以不起作用,是因为您创建了一个巨大的字符串,而不是创建一个数组,查询将根据该字符串进行检查。

相反,试着使用这个:

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