暂停逻辑mysql TIMEDIFF()和PHP所用的时间

时间:2012-09-27 09:17:19

标签: php mysql

我得到了这个查询,它接受了我的elapsed_time并且工作正常但后来我意识到我得到了actual_elapsed错误的值。 actual_elapsed是我使用TIMEDIFF()拍摄的计时器的运行时间。 log_time是一个日期时间,它是插入/制作动作(播放,暂停)的日期时间。 sequence是int,它告诉我哪个用户首先发生了什么。 status,也是int,告诉我所做的动作是play(1),pause(2)还是stop(3)。

就像我说的,我的问题是使用TIMEDIFF(now(),log_time)为actual_elapsed获得正确的值。如果我没有暂停动作,那就好了。

示例数据库条目

log_time               sequence     status

2012-09-27 15:31:02     1            1                
2012-09-27 15:31:04     2            2               **2  +**
2012-09-27 15:40:08     3            1
2012-09-27 15:40:45     4            2               **39 +**
2012-09-27 15:40:47     5            1
2012-09-27 15:40:57     6            3               **10 =**
                                                     **49**

我的查询给了我09分57秒,那时我应该只有49秒。

我的样本查询。

 (" select sequence_num, elapsed_time, status, TIMEDIFF(now(), log_time) as actual_elapsed from tbl");

我正在尝试获取actual_elapsed的持续时间。要做到这一点,我必须以某种方式获取休息时间(暂停)的总持续时间,然后得到elapsed_time和休息时间的差异。但是我也遇到了麻烦,因为用户可以多次暂停计时器。

当我设计我的数据库时,这似乎很简单。如何在没有这么多混乱的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

选择iStop-iStart FROM (SELECT SUM(log_time)AS iStop FROM tbl WHERE status IN(2,3))JOIN (SELECT SUM(log_time)AS iStart FROM tbl WHERE status = 1)b;

以上查询仅在暂停或停止为最后记录时才起作用