2016-05-31 11 views
0
Aktualisierung

Ich habe einen Trigger, der wie folgt aussieht:Auslöser nicht

CREATE TRIGGER findavg after INSERT 
ON rating 
FOR EACH row 
    UPDATE `profile` 
    SET userscore = (SELECT Avg(rscore) 
         FROM rating 
         WHERE `profile`.`pid` = rating.raterid) 
    WHERE pid = new.pid; 

wo

PROFILE table - pID, name, userScore 

RATING table - raterID, rScore, rDescription 

Es beim ersten Mal funktioniert ich diesen Trigger implementiert, aber gestern habe ich alle Daten in beide fallen gelassen Profil und Bewertung Tabelle. Also habe ich "frisch neue" Daten für Profil und Bewertung eingefügt.

Jetzt jedes Mal, wenn ich eine "RATING" einfügen, wird der Trigger nicht aktualisiert der userScore.

Also gerade jetzt, ich habe einige PROFILE, die "" in userScore haben, obwohl in der RATING-Tabelle der Wert "6" für den RScore ist.

Ich bin verwirrt, weil ich ziemlich sicher bin basierend auf Syntax, es ist schon richtig.

Hilf mir bitte. Vielen Dank.

+0

Wenn Sie dies in Ihrer Datenbank ausführen, funktioniert es? 'UPDATE PROFILE SET userScore = (WÄHLE AVG (rScore) aus RATING, wo PROFILE.pID = RATING.raterID) WHERE pID = someId' –

+0

Bist du sicher, dass der Trigger nicht fallen gelassen wurde, nachdem du die Tabellen abgelegt hast? –

+0

Wie genau haben Sie die Daten in der Bewertungstabelle gelöscht? Welchen Befehl hast du benutzt? – Shadow

Antwort

1

Versuchen:

DELIMITER // 

CREATE TRIGGER `findavg` AFTER INSERT ON `rating` 
FOR EACH ROW 
BEGIN 
    UPDATE `profile` 
    SET `userscore` = (SELECT AVG(`rscore`) 
        FROM `rating` 
        WHERE `raterid` = `pid`) 
-- WHERE `pid` = NEW.`pid`; 
    WHERE `pid` = NEW.`raterid`; 
END// 

DELIMITER ; 

SQL Fiddle demo

+0

JA! Stellt sich heraus mein Fehler ist in der letzten Zeile 'WHERE pid = NEW.pid'. Ich habe nicht bemerkt, dass ich pid = new.pid benutzt habe. Vielen Dank! – MasAdam