Php 从新创建的记录计算时间长度,然后将该时间插入记录中的一列?

Php 从新创建的记录计算时间长度,然后将该时间插入记录中的一列?,php,mysql,join,Php,Mysql,Join,我有这样一个数据库: 主桌叫 “过程”在“过程事件”表中可以有许多行。每个过程事件行都有一个名为“时间”的列 在这里,我可以计算从记录的第一行到最后一行的总时间 情况就是这样: -创建过程表中的行并添加数据-工作 -过程事件行在“过程事件”表中创建,并且 填满了-工作 -使用中的第一行和最后一行计算时间长度 那张唱片不起作用 -将计算出的时间长度插入在开始时创建的过程行列中。此列将称为“过程长度” 我为什么要这样做? 这将允许用户查找过程 这是我的疑问: SELECT procedure_id

我有这样一个数据库:

主桌叫

“过程”在“过程事件”表中可以有许多行。每个过程事件行都有一个名为“时间”的列

在这里,我可以计算从记录的第一行到最后一行的总时间

情况就是这样:

-创建过程表中的行并添加数据-工作

-过程事件行在“过程事件”表中创建,并且 填满了-工作

-使用中的第一行和最后一行计算时间长度 那张唱片不起作用 -将计算出的时间长度插入在开始时创建的过程行列中。此列将称为“过程长度”

我为什么要这样做? 这将允许用户查找过程

这是我的疑问:

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
我应该把它放在存储过程中吗

当前我的查询出现错误1064:


谢谢您的时间。

您的查询中有一些错误:

SELECT procedure_id, SELECT MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 
这是不好的,不是每个要检索的字段或要计算的函数都使用select per query once(选择一次),因此上面是:

SELECT procedure_id, MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 
其次,时间和开始是保留字,不能用作字段名(除非用倒勾“`”括起来,但这不是一个好的建议)

始终尽量使查询尽可能简单-这将为您提供:

  • 便于将来的维护

  • 可读性

  • 绩效效益

如果您只想计算一个过程的持续时间,这可以为您提供一个起点:

SELECT
  procedure_id,
  TIMEDIFF(MAX(`time`), MIN(`TIME`)) AS duration
FROM procedure_events
GROUP BY procedure_id
然后可以将计算出的值插入相应的表中

干杯