我有一个填充了邮件的表格,其中包含来自某些域名的所有邮件。列是 - domain_name, subject and receipt
。
我想找到我的数据库中所有已经发送过“欢迎”邮件和收据的域名。
将邮件作为收据:
g.receipt != '{}'
为了使邮件成为“欢迎”邮件:
g.subject regexp 'Welcome'
问题是这两个条件造成了冲突。我不能搜索他们两个因为我将得到0结果。单个邮件可以是欢迎 OR 收据。
但我需要找到那些通过时间发送的域名。
我所能做的就是通过这种方式缩小可能性:
select
*
from
(select
if(g.receipt != '{}', @R:=1, @R:=0) As Receipt,
if(g.subject regexp 'Welcome', @M:=1, @M:=0) AS Welcome,
g.domain_name,
g.subject,
g.receipt
from
table as g
) as B
where
(@M:= 1 and @R:=0) or (@R:=1 and @M:=0)
group by domain_name, Welcome, Receipt
此代码为我提供了发送“欢迎”或收据的所有域名。 (我在数据库中有其他类型的消息)。有没有办法对此进行编码,所以我不需要用眼睛找到它们?
谢谢,我使用mysql。
答案 0 :(得分:1)
这可以为您提供所需的结果。请注意,由于domains
是保留关键字,我已将您的表table
称为。
select distinct domain_name from domains welcome_messages
where
subject like '%Welcome%'
and exists
(
select * from domains receipts
where
receipts.receipt != '{}'
and welcome_messages.domain_name = receipts.domain_name
)
这是上面脚本的sqlfiddle。