我有我的网站用户(总是在两个用户)之间的联系机制。用户A(发送者)可以发送消息以基于两个规则的用户B(接收器):如何在特定行之后对行进行计数?
用户A可以发送2个消息极力用户B和他必须接收来自用户B的至少一个消息是能够发送另一个2.
用户A可以在每天的时间段内向每个人发送4条消息,而不是更多。
这里是我的表结构:
-- 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 |
+----+-----------+------------+--------------------------+------------+
这里是我当前的查询:
INSERT INTO contact(sender_id, receive_id, message, date_time)
SELECT ?, ?, ?, unix_timestamp()
FROM dual
WHERE NOT EXISTS(
SELECT count(*) AS num_day,
FROM contact
WHERE user_id = ?
AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))
HAVING num_day > 4
)
正如你所看到的,只有第二条规则是我的查询实现。我怎样才能实现查询的第一条规则?
一般来说,如果您在*行之后提及行*,您必须让它们按某列排序。因此,您可以计算该列中的值大于(或小于)该列中该列的值的相关行。 –
@JiriTousek你的意思是我需要添加一列?我确定。如果你认为这是解决方案,请写一个答案 – stack
不,我的意思是说,在考虑“之后”时,你可能按行列排序。因此,您可以比较此列中的值以确定行是“之前”还是“之后”,并且只在“之后”计算行。 –