2016-08-05 98 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(該差異尚未明確,但尚未回答問題)有所不同,那麼您應該更喜歡使用過程。我可以指導關於定義並調用它。

如果你不想使用的程序,必須與觸發器做到這一點則是你必須使用一個單獨的表