Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“更改行”;“地位”;在MySQL中以不同的时间间隔实时访问_Mysql_Time_Real Time - Fatal编程技术网

“更改行”;“地位”;在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

我将尽可能详细地解释这个问题,而不解释应用程序本身

我有一个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 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'