2016-08-05 27 views
-1

的这是我的触发器:MySQL的触发器 - 增加数量取决于插入值

CREATE TRIGGER instant_messages_a BEFORE INSERT ON messages_messages 
FOR EACH ROW 
BEGIN 

IF NEW.received = 1 THEN 

INSERT INTO messages_folders (id, addressee, sender, count_total, updated_time, nickname, subject, ipadr, new_messages, photo) VALUES 
(NULL,NEW.addressee_id,NEW.sender_id,1,UNIX_TIMESTAMP(NOW()),NEW.nickname,NEW.subject,NEW.ipadr,1,0) 
ON DUPLICATE KEY UPDATE count_total=count_total+1,updated_time=UNIX_TIMESTAMP(NOW()),subject=NEW.subject,ipadr=NEW.ipadr,new_messages=new_messages+1,photo=NEW.photo; 

ELSE 

INSERT INTO messages_folders (id, addressee, sender, count_total, updated_time, nickname, subject, ipadr, new_messages, photo) VALUES 
(NULL,NEW.addressee_id,NEW.sender_id,1,UNIX_TIMESTAMP(NOW()),NEW.nickname,NEW.subject,0,0,0) 
ON DUPLICATE KEY UPDATE count_total=count_total+1; 

END IF; 

END 

问题N + 1

MySQL查询插入$_POST['received']价值为instant_messages_a。此值始终为0或1.我想根据$_POST['received']值增加messages_folders表中的count_totalnew_messages列的值。事情是这样的:

count_total=count_total+$_POST['received'] 
new_messages=new_messages+$_POST['received'] 

我修改触发:

... new_messages=new_messages+NEW.received ... 
... inbox_count_total=inbox_count_total+NEW.received ... 

但它不工作 - 在new_messages和inbox_count列中的值留更新后相同。为什么?

问题N 2

我只需要在messages_folders$_POST['subject']值。我只是因为触发器需要用此值更新messages_folders表而将它插入instant_messages_a表中。有什么办法如何更新messages_folders table

...subject=NEW.subject... 

没有instant_messages_a表中插入$_POST['subject']

+0

请它一次一个问题。请定义不起作用,最重要的是。请__格式化您的代码____0_ – e4c5

+0

好的,对不起。不起作用 - 'new_messages'列中的值在更新后保持不变:'new_messages = new_messages + NEW.received' – user1406271

+0

'received = 1 then new_messages = new_messages + NEW.new_messagesand when received = 0' ??? ? – Sami

回答

0

以下查询提供所有您想要实现的功能。不需要单独的表格,也不需要触发器。

INSERT INTO messages_folders 
(
    addressee, sender, count_total, updated_time 
    ,nickname, subject, ipadr, new_messages, photo 
) 
VALUES 
(
    '1','2',1,NOW(),'sam' 
    ,'some','3','mesg','img' 
) 
ON DUPLICATE KEY UPDATE 
count_total=count_total+1 
,new_messages =concat(new_messages,'\n','mesg') 
,updated_time=NOW(); 

''中的值将由您在查询中提供。

但是,如果您仍然需要与received=0received=1(该差异尚未明确,但尚未回答问题)有所不同,那么您应该更喜欢使用过程。我可以指导关于定义并调用它。

如果你不想使用的程序,必须与触发器做到这一点则是你必须使用一个单独的表