0

私は常にSPAMと戦っているので、ユーザーが1日に40人以下の新しいユニークメンバーに連絡することを制限したいと思います。

メッセージを追跡するための現在のDBスキーマは次のようになります

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ですが、ユーザーが応答したので、これをカウントから除外したいと思います。

私の例のデータに基づいて、受信者が送信者に応答したため、これら2つのエントリをカウントから除外したいと思います。過去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 に答える