这是我的触发器:
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
。
答案 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=0
和received=1
时仍然需要不同的东西(那个差异尚不明确),那么您应该更喜欢使用某个程序。我可以指导定义和调用它。
如果您不想使用过程并且必须使用触发器,那么是的,您必须使用单独的表