2016-08-05 45 views
-1

Das ist mein Auslöser:MySQL Trigger - zunehmende Zahl der eingelegten Wert je

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 

Frage N 1

MySQL Query $_POST['received'] Wert in instant_messages_a einfügt. Dieser Wert ist immer 0 oder 1. Ich möchte die Werte count_total und new_messages Spalten in messages_folders Tabelle abhängig von der $_POST['received'] Wert erhöhen. Etwas wie folgt aus:

count_total=count_total+$_POST['received'] 
new_messages=new_messages+$_POST['received'] 

I modifiziert, um den Auslöser:

... new_messages=new_messages+NEW.received ... 
... inbox_count_total=inbox_count_total+NEW.received ... 

Aber es funktioniert nicht - die Werte in neue_nachrichten und inbox_count Spalten die gleiche nach dem Update bleiben. Warum?

Frage N 2

Ich brauche $_POST['subject'] Wert nur in messages_folders Tabelle. Ich füge es auch in instant_messages_a Tabelle ein, nur weil der Trigger messages_folders Tabelle mit diesem Wert aktualisieren muss. Gibt es eine Möglichkeit, wie messages_folders table

...subject=NEW.subject... 

zu aktualisieren, ohne $_POST['subject'] in instant_messages_a Tabelle einfügen.

+0

Bitte es eine Frage auf einmal machen. Bitte definieren funktioniert nicht und am wichtigsten von allen. Bitte __formatieren Sie Ihren Code__ – e4c5

+0

ok, tut mir leid. Funktioniert nicht - die Werte in der Spalte "new_messages" bleiben nach dem Update gleich: 'new_messages = new_messages + NEW.received' – user1406271

+0

wenn 'received = 1 dann new_messages = new_messages + NEW.new_messagesand was wenn empfangen = 0' ??? ? – Sami

Antwort

0

Folgende Abfrage dient alles, was Sie erreichen möchten. Keine Notwendigkeit für separate Tabelle, keine Notwendigkeit für Trigger.

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(); 

Die Werte in '' wird von Ihnen in Abfrage zur Verfügung gestellt werden.

Wenn Sie jedoch noch etwas anderes benötigen, wenn received=0 und wenn received=1 (das Diff ist noch nicht klar aus Frage), dann sollten Sie eine Prozedur bevorzugen. Ich kann über definieren und nennen es.

Und wenn Sie Prozedur nicht verwenden wollen und müssen es mit Triggern tun ja dann haben Sie eine separate Tabelle verwenden