计算行插入时间差

时间:2012-10-05 07:00:22

标签: php mysql timestamp

例如,如果我在mysql表中有id和timestamp。它包含几个记录。如何在php中查找并存储每一行​​插入时间差,即比较第2行和第1行的插入时间以及存储结果,将第3行与第2行进行比较并存储结果.......

我有消息名称的表,字段是

id int(11), 
timestamp int(11),
body_xml text, 
chatname text 

此表包含聊天信息,我需要查找总聊天时间,不需要。对于使用id的特定用户可用的对话。所以我想找到每一行的时间差,如果时差超过10分钟,则考虑作为新的对话。

我的任务是查找有关特定用户的总聊天时间,而不是。在skype中为该用户提供的对话。

现在我将所有聊天信息存储到mysql表中。

-------------------------------------------------------------------------------------------
id  timestamp           message     name
-------------------------------------------------------------------------------------------
1   2012-10-11 11:18:34     hi          ram
2   2012-10-11 11:19:14     hw r u      ram
3   2012-10-11 11:20:55     fine        ram
4   2012-10-11 11:55:03     r u there   ram
5   2012-10-11 11:56:21     yes         ram
6   2012-10-11 11:57:33     then        ram

在上面的表中,id 1到3的时差小于10分钟,但id 4与id 3的时差超过10分钟,所以这里它将被视为新的会话,存储id 1到3的总时间进入可变和最高时间4到6的相同可变数,这里的总对话是2。

我需要输出为 对流总数2 总时间为xx:xx

我试过这段代码

SELECT A.id, A.timestamp, (B.timestamp - A.timestamp) AS timedifference
FROM time_diff A CROSS JOIN time_diff B WHERE B.id IN (SELECT MIN (C.id) FROM time_diff C WHERE C.id > A.timestamp)
ORDER BY A.id ASC

我得到了空结果

1 个答案:

答案 0 :(得分:1)

好的,以下是步骤:

  1. google ALTER TABLE mysql,如果你必须为时差添加一行
  2. 谷歌关于加入,或者 link 非常好。为什么?您希望根据id列加入自己的表格,但一边是id+1。如果ID不是直接序列,您可以这样做:select r1.* , (select max( timestamp ) from yourTable r2 where r1.id > r2.id) from yourTable r1
  3. 了解 timestampdiff() function
  4. 当您了解了第2步和第3步并查看它是否能满足您的需求时,创建一个SQL SELECT语句。
  5. 当您需要第4步时,将此SELECT语句转换为UPDATE语句。
  6. 其余的计算最好用PHP完成。
  7. 如果还有问题还没有回来,我们很乐意为您提供帮助(如果您付出了一些努力:))
  8. 祝你好运。