我的网站用户(始终在两个用户之间)之间有联系机制。用户A(发送者)可以根据两个规则向用户B(接收者)发送消息:
用户A可以向用户B发送2条消息,他必须至少收到一条来自用户B的消息,才能发送另一条消息。
用户A可以在每天的时间内向每个人发送4条消息,而不是更多。
这是我的表结构:
#For example (< Android Nougat):
myTextView.setText(Html.fromHtml("č"));
#For example (>= Android Nougat):
myTextView.setText(Html.fromHtml("č", Html.FROM_HTML_MODE_COMPACT));
这是我目前的疑问:
-- contact
+----+-----------+------------+--------------------------+------------+
| id | sender_id | receive_id | message | date_time |
+----+-----------+------------+--------------------------+------------+
| 1 | 123 | 456 | Hi, how are you? | 1492431111 |
| 2 | 123 | 789 | How are you doing? | 1492431112 |
| 3 | 456 | 789 | Why would you say that? | 1492431113 |
| 4 | 123 | 456 | Why don't you answer? | 1492431114 |
| 5 | 789 | 456 | Because the sky is high | 1492431115 |
| 6 | 123 | 789 | Hello? | 1492431116 |
+----+-----------+------------+--------------------------+------------+
如您所见,我的查询中只实现了第二条规则。我怎样才能为查询实现第一条规则?
答案 0 :(得分:0)
查询以查找来自&#39; A&#39;的消息数量。到&#39; B&#39;自上次回复以来:
SELECT count(*)
FROM contact
WHERE sender_id = 'A'
AND receive_id = 'B'
AND date_time > (
SELECT max(date_time)
FROM contact
WHERE sender_id = 'B'
AND receive_id = 'A'
)
请注意,如果没有“B&#39; B&#39;到&#39; A&#39;但是 - 你必须修改查询以解决这个问题。
答案 1 :(得分:0)
我不确定在数据库中实现这个逻辑是一个极好的想法 - 你似乎正在寻找一个只会插入消息A写入的查询,如果他们之前没有联系过B超过两次但是那种在前端应用程序中,逻辑会更好。为此,您最好先处理几个问题:
Select count(*) from contact where sender_id = A and date_time > unix_timestamp(curdate())
如果&gt; = 4
,则拒绝发送消息运行JiriTousek的查询并拒绝发送,如果它是&gt; = 2
通过拒绝发送,我的意思是改变前端,因此消息传递是不可能的,因此他们不会浪费生命来输入永远不会发送的消息。在插入时执行此阻塞对于那个来说太晚了