2012-04-09 12 views
3

Ich erwäge, Trigger in meiner Datenbank zu verwenden, um Änderungen der Buchungen zu verfolgen. Jedes Mal, wenn eine Buchung hinzugefügt wird, füge ich einen Punkt zu einer Tabelle hinzu, die eine Punktzahl in "Tenure" hält.mysql löst Probleme auf Update

Wenn ich diesen Befehl ausführen kann ich die ID vor dem Hinzufügen des Triggers ändern.

UPDATE bookit SET prov_id = 32 where book_id=2; 

nach dem Hinzufügen der folgenden Trigger ich nicht aktualisieren prov_id bekommen und erhalten diesen Fehler

1054 - Unknown column 'bookit.prov_id' in 'where clause'

Trigger:

delimiter // 

CREATE TRIGGER update_tenure_it BEFORE 

UPDATE ON bookit FOR EACH ROW 

BEGIN 


if(new.prov_id<>old.prov_id) THEN 

UPDATE provider_score set tenure=(tenure+1) where bookit.prov_id=provider_id; 

END IF; 

END; 

// 

Wissen Sie, was ich falsch mache und woher das Problem kommt? Sollte ich überhaupt erwägen, Trigger für eine solche Operation zu verwenden oder einfach in PHP zu codieren? Vielen Dank!

Antwort

1

In Triggern haben Sie über TABLENAME.FIELD keinen direkten Zugriff auf die Tabelle; Stattdessen geben die Aktualisierungstrigger old. * und new. * als Aliase der Zeile vor bzw. nach dem Update aus. In diesem Fall sollte folgendes funktionieren:

delimiter // 

CREATE TRIGGER update_tenure_it BEFORE 

UPDATE ON bookit FOR EACH ROW 

BEGIN 


if(new.prov_id<>old.prov_id) THEN 

UPDATE provider_score set tenure=(tenure+1) where new.prov_id=provider_id; 

END IF; 

END; 

// 
+0

Vielen Dank, ich schätze es wirklich. Das hat funktioniert. – igl2000

+0

Keine Sorge - fröhliche Codierung –

0

Ihr Update muss in der bookit-Tabelle der Tabelle provider_score beitreten, die Sie aktualisieren. Gerade jetzt hat es nur einen Bezug zu Bookit baumeln lose.

+0

Danke für die Antwort. Ich bin in der Lage, den Trigger erfolgreich zu erstellen, notehlessess auch nach dem Beitritt "provider_score.provider_id" – igl2000

+0

Ich kann nicht aktualisieren in UPDATE buchen SET PROV_ID = 3 wo Buch_ID = 2; und erhalten Sie den gleichen Fehler – igl2000

+0

Können Sie Ihre Frage mit Ihrem neuen Code aktualisieren? – Jordan