0

我一直在与垃圾邮件作斗争,所以我想限制用户每天联系不超过 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 小时内的唯一收件人,但排除从一开始就回复此发件人的任意数量的收件人?

4

1 回答 1

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)

看起来您的表格没有任何方式可以消除单个消息的歧义/正在回复的消息,这可能是一个问题。

于 2013-02-08T18:20:41.427 回答