我一直在与垃圾邮件作斗争,所以我想限制用户每天不要联系40位以上的新成员。
我当前用于跟踪邮件的数据库架构如下所示
id sender receiver content date belong_to
100 5 7 send1 2013-02-08 09:31:36 5
101 5 7 send1 2013-02-08 09:31:36 7
102 7 5 recevd 2013-02-08 09:32:18 7
103 7 5 recevd 2013-02-08 09:32:18 5
我当前的查询看起来像这样返回过去24小时内不同收件人的数量:
SELECT COUNT(DISTINCT(receiver))
FROM `messages`
WHERE sender = 5
AND date >= DATE_SUB(NOW(), INTERVAL 1 DAY)
基于此示例的输出为1,但由于用户响应,我希望将其排除在计数之外。
根据我的示例数据,我希望将这两个从我的计数中排除,因为接收方已对发送方做出响应。我如何在过去24小时内考虑唯一收件人,但排除从一开始就响应此发件人的任何数量的收件人?
答案 0 :(得分:3)
看起来像这样:
SELECT COUNT(DISTINCT(receiver))
FROM `messages` m,
WHERE sender = X
AND NOT EXISTS( SELECT * FROM `messages` m2 where receiver = X and sender = m.reciever )
AND date >= DATE_SUB(NOW(), INTERVAL 1 DAY)
看起来您的表格没有任何消除个别消息消息的方式/正在回复哪条消息,这可能是一个问题。