通过PHP或mySQL计算时间长度?

通过PHP或mySQL计算时间长度?,php,mysql,codeigniter,Php,Mysql,Codeigniter,在我的表单中,用户使用与每个事件相关联的单独时间来记录许多事件 e、 g.对于阑尾切除术,第一个事件#1开始于下午12:54:33,最后一个偶数事件#12发生在下午2:23:04。 阑尾切除术有12个事件 这些事件被放置在一个单独的表中,事件名称有一个外键(阑尾切除术) 因此,如果我想计算时间量,最好是通过数据库或使用PHP进行计算 由于以下原因,我不确定: PHP: 时间格式是字符串,我认为你不能减法 弦 时间格式类似于HH:MM:SS,可能比较复杂 拆分字符串并稍后重新连接 MySQL: 列

在我的表单中,用户使用与每个事件相关联的单独时间来记录许多事件

e、 g.对于阑尾切除术,第一个事件#1开始于下午12:54:33,最后一个偶数事件#12发生在下午2:23:04。 阑尾切除术有12个事件

这些事件被放置在一个单独的表中,事件名称有一个外键(阑尾切除术)

因此,如果我想计算时间量,最好是通过数据库或使用PHP进行计算

由于以下原因,我不确定:

PHP:

时间格式是字符串,我认为你不能减法 弦

时间格式类似于HH:MM:SS,可能比较复杂 拆分字符串并稍后重新连接

MySQL:

列中的时间格式是实际时间,而不是字符串 将 必须使用mysql连接,然后找到该连接的总事件数 程序哪一个比较复杂

存储过程

我对很多这方面还是新手,所以我想知道您在这方面的指导是什么?

使用SQL:

SELECT procedure_id, SUBTIME(events_max.start, events_min.start) AS duration
FROM procedure
JOIN ( SELECT procedure_id, SELECT MAX(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_max USING ( procedure_id )
JOIN ( SELECT procedure_id, SELECT MIN(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_min USING ( procedure_id )
GROUP BY procedure_id

将根据第一个事件开始与最后一个事件之间的时间差,为您提供每个过程的过程ID和持续时间。

能否请您提供数据库布局以帮助我们帮助您?感谢您这里是一个架构,很抱歉延迟。我下面的答案现在已更改,以反映您的布局。