-1

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

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

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

此表包含聊天信息,我需要找到总聊天时间和编号。使用 id 的特定用户可用的对话。所以我想找到每一行的时间差,如果时间差超过 10 分钟,它认为是新的对话。

我的任务是找到关于特定用户的总聊天时间,而不是。Skype 中该用户可用的对话。

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

-------------------------------------------------- -----------------------------------------
id 时间戳消息名称
-------------------------------------------------- -----------------------------------------
1 2012-10-11 11:18:34 喜公羊
2 2012-10-11 11:19:14 hw ru ram
3 2012-10-11 11:20:55 细公羊
4 2012-10-11 11:55:03 有 ram
5 2012-10-11 11:56:21 是的 内存
6 2012-10-11 11:57:33 然后 ram

上表中 id 1 到 3 的时差小于 10 分钟,而 id 4 与 id 3 的时差超过 10 分钟,所以这里会认为是新会话,将 id 1 到 3 的总时间存储到 varable 中将 4 到 6 的总时间更新为同一个变量,这里的总对话是 2。

我需要输出为总会话数 2 总时间为 xx:xx

我试过这段代码

SELECT A.id, A.timestamp, (B.timestamp - A.timestamp) 作为时差
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)
由 A.id ASC 订购

我得到空结果

4

1 回答 1

1

好的,步骤如下:

  1. google ALTER TABLEmysql,如果你必须为时差添加一行
  2. google about joins,或者这个链接很不错。为什么?您想根据id列将您的表与自身连接,但id+1在一侧。如果 id 不是一个直接的序列,你可以这样做:select r1.* , (select max(timestamp) from yourTable r2 where r1.id > r2.id) from yourTable r1
  3. 阅读timestampdiff() 函数
  4. 当你理解了第 2 步和第 3 步后,创建一个 SQLSELECT语句,看看它是否能得到你想要的。
  5. 当您想要第 4 步时,您可以将此SELECT语句转换为UPDATE语句。
  6. 其余的计算最好在 PHP 中完成。
  7. 当仍有问题时回来,我们很乐意为您提供帮助(如果您表现出一些努力:))

祝你好运。

于 2012-10-05T08:07:02.547 回答