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