“更改行”;“地位”;在MySQL中以不同的时间间隔实时访问
我将尽可能详细地解释这个问题,而不解释应用程序本身 我有一个MySQL表,记录发送消息的时间,以及消息是否已读。 现在我需要在这个表中创建一列,根据消息未读的时间间隔给出消息的状态“更改行”;“地位”;在MySQL中以不同的时间间隔实时访问,mysql,time,real-time,Mysql,Time,Real Time,我将尽可能详细地解释这个问题,而不解释应用程序本身 我有一个MySQL表,记录发送消息的时间,以及消息是否已读。 现在我需要在这个表中创建一列,根据消息未读的时间间隔给出消息的状态 For example, if message was unread for: 1h - it gets status of "1"; 1day - status of "2"; 2days - status of "3"; 3days - status of "4"; 7days and more - status
For example, if message was unread for:
1h - it gets status of "1";
1day - status of "2";
2days - status of "3";
3days - status of "4";
7days and more - status of "5".
假设我有一条13:20发送的消息,它是未读的,状态为“NULL”。我需要它在14:20的状态为“1”,在第二天13:20的状态为“2”
现在我可以想出几个选择,但它们每分钟都涉及到老太婆的工作和/或大量的计算。我的网站正在快速发展,我想找到一个最佳的和可扩展的选择。也许MySQL内部有一些选项,比如触发器之类的
非常感谢您的帮助我建议在时间戳列中创建一个
created\u作为消息模式的一部分,这将允许您运行类似以下内容的查询:
select *, datediff(now(), created_at) as date_diff from your_table;
然后,当您准备用于演示的数据时,您可以执行以下操作(仅演示):
在检索消息的查询中,这似乎比在不断更新表的查询中处理得更合适
您可以在检索消息后计算应用程序中的状态,也可以从查询本身返回计算状态字段:
SELECT
user,
from,
subject,
time,
created,
read,
IF(NOW() - INTERVAL 7 DAY > created, 5,
IF(NOW() - INTERVAL 3 DAY > created, 4,
IF(NOW() - INTERVAL 2 DAY > created, 3
IF(NOW() - INTERVAL 1 DAY > created, 2
IF(NOW() - INTERVAL 1 HOUR > created, 1
0
)
)
)
)
)
FROM messages
WHERE user = 'foo'
如果您正在存储消息发送的时间(我假设您正在存储),那么在这段时间内使用mysql查询不是更容易、更简单吗?这就不需要一组单独的操作来更新一个新的列。你在哪里能找到它?
SELECT
user,
from,
subject,
time,
created,
read,
IF(NOW() - INTERVAL 7 DAY > created, 5,
IF(NOW() - INTERVAL 3 DAY > created, 4,
IF(NOW() - INTERVAL 2 DAY > created, 3
IF(NOW() - INTERVAL 1 DAY > created, 2
IF(NOW() - INTERVAL 1 HOUR > created, 1
0
)
)
)
)
)
FROM messages
WHERE user = 'foo'