MySQL触发器 - 根据插入的值增加计数

时间:2016-08-05 08:15:48

标签: mysql triggers

这是我的触发器:

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.我希望根据count_total值增加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

我只在$_POST['subject']表中需要messages_folders值。我也将它插入到instant_messages_a表中,因为触发器需要使用此值更新messages_folders表。有没有办法更新messages_folders table

...subject=NEW.subject...

未在$_POST['subject']表中插入instant_messages_a

1 个答案:

答案 0 :(得分: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时仍然需要不同的东西(那个差异尚不明确),那么您应该更喜欢使用某个程序。我可以指导定义和调用它。

如果您不想使用过程并且必须使用触发器,那么是的,您必须使用单独的表