2017-07-25 21 views
1

大家好,我在這裏有一些小問題。這個想法很簡單。每次我在主表中插入新行時,我需要將值提取到子表在mysql中使用觸發器從主表中查找超時和超時

主表:

+--------+------------+-------+ 
+ 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 + 

Usualy,我讓這個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 

之前,我意識到,我的代碼需要更長的時間來加載頁面。我認爲使用觸發器會很有效率。請幫助:)

+0

有什麼問題?你說:「每當新行被插入到主人觸發的子表」,你似乎已經使用觸發器 – Ashish451

+0

@ Ashish451看起來像OP是手動插入到子表中的行。 –

+0

@ Ashish451觸發,我的意思是生成。 :) –

回答

0

那麼,如果你正在做手工插入,並希望觸發使用

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

+0

我需要做一些修改,但它的作品。謝謝, –

+0

你可以接受這個作爲答案,如果工作 – Ashish451

0

插入運行查詢AFTER INSERT是,您正確使用觸發器是一個比每次加載頁面時都插入更好的選項。

看看教程here。在你的情況下,你應該使用AFTER INSERT觸發器,它在插入到主表的新行之後向你的子表插入一條新記錄。繼續閱讀部分MySQL觸發器:示例AFTER INSERT,應該爲您提供一個關於如何爲您的方案構建觸發器的好主意。 HTH。

+0

感謝您的意見。真的很感激它。 –