如果有一个邮件脚本,我设置为限制我发送到的域。如果没有设置节流速率的剩余域,则会为其分配默认速率。要找到与现有限制域不匹配的域,我使用这个php:
$query = "SELECT * FROM `mailer_lists` ml JOIN `mailer_controller` mc";
$query .= " ON ml.project_name = mc.project_name";
$query .= " WHERE `email` NOT LIKE '%";
$query .= "" . implode("' OR '%", $throttle_domain) . "'";
echo "$query";
回声的输出是:
SELECT * FROM `mailer_lists` ml JOIN `mailer_controller` mc ON ml.project_name = mc.project_name WHERE `email` NOT LIKE '%gmail.com' OR '%hotmail.com' OR '%yahoo.com' OR '%aol.com'
据我所知,输出看起来非常好。我在phpmyadmin中运行了一个测试查询,只有第一个域适用。在OR被忽略之后的任何事情。
这个查询有什么明显错误我错过了吗?使用NOT LIKE语句时,不能使用多个OR语句吗?
答案 0 :(得分:14)
我愿意
where substring_index(`email`,'@',-1) not in ('yahoo.com','gmail.com')
等等。
答案 1 :(得分:4)
你采用mySQL的“人类语言”方法太过分了。 :)每个OR
都被解释为它自己的表达式,而不是作为LIKE
反对的值。
另外,我想你想使用AND
。使用OR
始终适用于每个行。
尝试
(`email` NOT LIKE "%gmail.com")
AND (`email` NOT LIKE "%hotmail.com")
AND (`email` NOT LIKE "%yahoo.com") ....
答案 2 :(得分:3)
您必须重复field_name not like
部分:
SELECT *
FROM `mailer_lists` ml
JOIN `mailer_controller` mc ON ml.project_name = mc.project_name
WHERE
`email` NOT LIKE '%gmail.com'
and `email` NOT LIKE '%hotmail.com'
and `email` NOT LIKE '%yahoo.com'
and `email` NOT LIKE '%aol.com'
LIMIT 50
(您可能必须在条件之间使用and
,而不是or
)