从MySQL结果中删除某些单词

时间:2013-12-13 21:58:10

标签: php mysql

我有两个表,usersemail_logsusersnameemail,表email_logsemail 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表中已存在的电子邮件。

请帮忙!

4 个答案:

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