2015-11-01 58 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