2016-08-05 17 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のクエリはinstant_messages_a$_POST['received']値を挿入します。この値は常に0または1です。とnew_messagesという値の列をmessages_foldersの表の$_POST['received']の値に応じて増やしたいとします。このような何か:

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テーブルにも挿入します。 instant_messages_a表に$_POST['subject']を挿入せずにmessages_folders table

...subject=NEW.subject... 

を更新する方法をどのような方法があります。

+0

を使用する必要があり時点で一つの質問してください。定義してください、すべての中で最も重要なのは機能しません。 __format your code__ – e4c5

+0

よろしくお願いいたします。 'new_messages = new_messages + NEW.received' – user1406271

+0

' received = 1のときnew_messages = new_messages + NEW.new_messagesそして何が受信されたとき= 0'のように 'new_messages'列の値は同じままです。 ? – 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(質問との違いはまだ分かっていません)のときにまだ別のものが必要な場合は、手順を使用することをお勧めします。私は定義について案内し、それを呼び出すことができます。

そして、あなたは手順を使用したくないとトリガーでそれを行う必要がある場合は[はい、あなたは別のテーブル

関連する問題