2015-11-01 57 views
-1

我想構建一個觸發器,問題是它不工作。我有語法問題。我需要構建一個觸發器,它將在表更新之前用同一個表中的另一條記錄更新表。下面的觸發器描述了我想要做的事情,但它不起作用。觸發MSQL大問題,SQL不工作?

$deletequery = ' 

     DELIMITER // 

     CREATE TRIGGER after_insert_job_sent 
     AFTER INSERT 
      ON Envato_CustomConfig_job_sent FOR EACH ROW 

     BEGIN 

      DELETE FROM `Envato_CustomConfig_Job_Queue` 
      WHERE Job_ID = '.$value['Job_ID'].' 
      AND email -'.$value['email'].'; 

      UPDATE `envato_customconfig_job_status` SET `email_Sent_Count`= email_Sent_Count+1 
      WHERE Job_ID = '.$value['Job_ID'].'    
     END; // 

     DELIMITER; 

     insert into Envato_CustomConfig_job_sent 
     values (NULL , '.$value['Job_ID'].', '.$value['email'].', now(); 

     '; 

編輯:

爲什麼我的查詢追加其他記錄藏漢.... 所以基本上它是在更新工作不過是添加一個到最後一個記錄數據庫。我試過極限它沒有工作。有任何想法嗎。

insert into Envato_CustomConfig_job_sent 
values (NULL , '37', 'email', now()); 

DELETE FROM Envato_CustomConfig_job_queue 
WHERE Job_ID = '37' 
AND email ='email'; 

UPDATE envato_customconfig_job_status SET `email_Sent_Count`= email_Sent_Count+1 
WHERE Job_ID = '37';   
+0

你爲什麼要在它外面創建一個觸發器和一個簡單的jane其他stmt,將它們全部包裝在一個字符串中。 – Drew

+0

我不明白。 @Drew –

+1

觸發器必須以自己的優點存儲在數據庫中,並堅持。它沒有按照你這樣做的方式,嵌入式PHP塊'WHERE Job_ID ='。$ value ['Job_ID']'' – Drew

回答

1

觸發器,事件,函數和存儲過程駐留爲存儲在特定數據庫中的代碼。只有其中一些參數傳遞(如函數和存儲過程)。其他人只是自己的(事件和觸發器)。

您試圖執行的操作是使用PHP變量信息執行delete這僅僅是一個查詢。

至少你有DELIMITER概念被釘死,作爲一個微不足道的錯誤,阻止了很多人。但是,如果您將突出顯示爲 Trigger塊,則會看到語法錯誤突出顯示,很可能是圍繞嵌入的WHERE Job_ID = '.$value['Job_ID'].'塊。而且由於觸發器在插入等觸發事件上運行,所以它不會有關於該塊的線索。

當我說突出顯示時,我的意思是在一個程序如Mysql Workbench中。

+0

不錯,您幫助清除了很多。想知道如果你對編輯中的問題有任何想法嗎? @drew –

+0

你有沒有觸發器或目前沒有。再加上你的'編輯'問題引用3個表格(發送,隊列和狀態表)。還要記住,觸發器可以觸發插入,更新,刪除,並且**已結婚**到特定表格。並且必須如此明確地編碼。我不知道你的數據庫與行值是什麼狀態,觸發存在。飛瞎子 – Drew

+0

我想你可能想在[機器創建]中看到[mysql create event](http://stackoverflow.com/a/32291923/)。它可能是你的發火焰的代碼,每分鐘或兩分鐘,並* *做的東西* – Drew