Php 在mysql中使用触发器从主表中查找输入和输出时间

Php 在mysql中使用触发器从主表中查找输入和输出时间,php,mysql,sql,triggers,Php,Mysql,Sql,Triggers,各位,我这里有个小问题。这个想法很简单。每次在主表中插入新行时,我都需要将值提取到子表 主表: +--------+------------+-------+ + id + dates + time + +--------+------------+-------+ + 101 + 2017/07/24 + 07:12 + + 101 + 2017/07/24 + 16:02 + + 102 + 2017/07/24 + 07:10 + + 102

各位,我这里有个小问题。这个想法很简单。每次在主表中插入新行时,我都需要将值提取到子表

主表:

+--------+------------+-------+   
+ id     + dates      + time  +
+--------+------------+-------+
+ 101    + 2017/07/24 + 07:12 +
+ 101    + 2017/07/24 + 16:02 +
+ 102    + 2017/07/24 + 07:10 +
+ 102    + 2017/07/24 + 15:58 +
+ 103    + 2017/07/24 + 07:02 +
+ 103    + 2017/07/24 + 16:05 +
+ 101    + 2017/07/25 + 07:10 +
+ 101    + 2017/07/25 + 15:34 +
+ 102    + 2017/07/25 + 07:00 +
+ 102    + 2017/07/25 + 16:38 +
+ 103    + 2017/07/25 + 07:02 +
+ 103    + 2017/07/25 + 16:18 +
然后,我们转到每次将新行插入主表时触发的子表。该表应如下所示:

+--------+------------+---------+----------+   
+ id     + dates      + time_in + time_out +
+--------+------------+---------+----------+
+ 101    + 2017/07/24 + 07:12   + 16:02    +
+ 102    + 2017/07/24 + 07:10   + 15:58    +
+ 103    + 2017/07/24 + 07:02   + 16:05    +
+ 101    + 2017/07/25 + 07:10   + 15:34    +
+ 102    + 2017/07/25 + 07:00   + 16:38    +
+ 103    + 2017/07/25 + 07:02   + 16:18    +
通常,我使用以下SQL代码生成子表:

INSERT INTO child_table (id, dates, time_in, time_out) 
SELECT id, dates, MIN(time) as time_in, MAX(time) as time_out FROM 
master_table GROUP BY dates, id

在我意识到我的代码需要更长的时间才能加载页面之前。我认为使用触发器会更有效率。请提供帮助:)

如果您正在手动执行插入操作,并且希望使用此触发器

DELIMITER //
CREATE TRIGGER `ADD_DATA_AUTO` AFTER INSERT ON `MASTERTABLE` FOR EACH ROW BEGIN    

INSERT INTO child_table (id, dates, time_in, time_out) 
SELECT id, dates, MIN(time) as time_in, MAX(time) as time_out FROM 
master_table GROUP BY dates, id


END//
DELIMITER ;

这个触发器的作用是:它告诉mysql在MASTERTABLE中插入后运行插入查询

DELIMITER //
CREATE TRIGGER `ADD_DATA_AUTO` AFTER INSERT ON `MASTERTABLE` FOR EACH ROW BEGIN    

INSERT INTO child_table (id, dates, time_in, time_out) 
SELECT id, dates, MIN(time) as time_in, MAX(time) as time_out FROM 
master_table GROUP BY dates, id


END//
DELIMITER ;

这个触发器的作用是它告诉mysql在MASTERTABLE中插入后运行插入查询

是的,与每次加载页面时插入相比,使用触发器是一个更好的选择


看看教程。在您的情况下,您应该使用AFTER INSERT触发器,在将新行插入到主表之后,将新记录插入到子表中。进入部分MySQL触发器:插入后的示例应能让您很好地了解如何为场景构造触发器。HTH.

是的,与每次加载页面时插入相比,使用触发器是一个更好的选择,这是正确的


看看教程。在您的情况下,您应该使用AFTER INSERT触发器,在将新行插入到主表之后,将新记录插入到子表中。进入部分MySQL触发器:插入后的示例应能让您很好地了解如何为场景构造触发器。HTH.

有什么问题??您所说的“每次将新行插入主表时触发的子表”似乎已经在使用了trigger@Ashish451看起来OP正在手动将行插入子表。@Ashish451已触发,我的意思是生成。:)什么问题??您所说的“每次将新行插入主表时触发的子表”似乎已经在使用了trigger@Ashish451看起来OP正在手动将行插入子表。@Ashish451已触发,我的意思是生成。:)我需要做一些修改,但它的工作。谢谢,我需要做一些修改,但它的工作。谢谢,谢谢你的建议。非常感谢。谢谢你的建议。非常感谢。