Reputation: 232
Hello currently my trigger updates on table update, and I need to change this to only fire when specific column changes.
code:
create trigger money after update on things
for each row
begin
UPDATE `current` c
INNER JOIN things t ON c.id2 = t.id2
INNER JOIN dude_base d ON d.id1 = c.is1
SET c.`curr_cash` = t.thing_cost * d.salary / 100;
end;
$$
And I need to change so it will turn on, when there is update on "thing_cost" from things.
@edit I have to update that curr_cash and things cost are totaly different values, I cannot compare them, they will always be different.
When I used
if NEW.things_cost <> OLD.things_cost
I get following error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 10
@edit
create trigger wys_sk_b after update on `dude_base`
for each row
begin
if NEW.salary <> OLD.salary
then
UPDATE `current` s
INNER JOIN things u ON s.id_thing = u.id_thing
INNER JOIN dude_base b ON b.id = s.id
SET s.`curr_cash` = u.thing_cost * b.salary/ 100;
end if;
$$
Upvotes: 1
Views: 9943
Reputation: 83
Try this code...
**create table sales** (orderno INT, sale INT,empsalary int, ts TIMESTAMP);
**create table history** (updated varchar(20), oldvalue INT,newvalue INT);
INSERT INTO **sales** (orderno,sale,empsalary) VALUES(1,700,7000);
INSERT INTO **sales** (orderno,sale,empsalary) VALUES(2,800,8000);
INSERT INTO **sales** (orderno,sale,empsalary) VALUES(3,900,9000);
DROP TRIGGER test.instrigger;
DELIMITER ///
CREATE TRIGGER test.instrigger AFTER UPDATE ON sales
FOR EACH ROW
BEGIN
IF NEW.sale <> OLD.sale THEN
INSERT INTO history (updated, oldvalue, newvalue) VALUES('sale', OLD.sale,NEW.sale);
END IF;
IF NEW.empsalary <> OLD.empsalary THEN
INSERT INTO history (updated, oldvalue, newvalue) VALUES('empsalary', OLD.empsalary,NEW.empsalary);
END IF;
END;
///
DELIMITER ;
Upvotes: 3
Reputation: 204894
delimiter $$
create trigger wys_sk_b after update on `dude_base`
for each row
begin
if NEW.salary <> OLD.salary
then
UPDATE `current` s
INNER JOIN things u ON s.id_thing = u.id_thing
INNER JOIN dude_base b ON b.id = s.id
SET s.`curr_cash` = u.thing_cost * b.salary/ 100;
end if;
end;
$$
Upvotes: 3