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

MySQL触发器-根据插入的值增加计数,mysql,triggers,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)

这是我的触发器:

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
问题1

MySQL查询将
$\u POST['received']
值插入到
即时消息中。此值始终为0或1。我想根据
$\u POST['received']
值增加
messages\u文件夹中
count\u total
new\u 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 ... 
但它不起作用-更新后,新邮件和收件箱计数列中的值保持不变。为什么?

问题2

我需要
$\u POST['subject']
值,仅在
邮件\u文件夹
表中。我还将其插入到
即时消息
表中,因为触发器需要使用此值更新
消息文件夹
表。有没有办法更新
邮件\u文件夹表

...subject=NEW.subject...

无需在
即时消息
表中插入
$\u POST['subject']

以下查询满足您的所有需求。不需要单独的表,不需要触发器

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=0
received=1
时仍然需要一些不同的东西(这个差异还不清楚),那么您应该更喜欢使用一个过程。我可以指导如何定义和调用它


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

请每次提出一个问题。请定义不起作用,最重要的是。请格式化您的代码好的,对不起。不起作用-更新后,
new\u messages
列中的值保持不变:
new\u messages=new\u messages+new.received
received=1时,则new\u messages=new\u messages+new.new\u messages和what-what received=0
问题1。您尚未告知您希望针对
received=1
received=0