Daevid, >> > > This is my first trigger I'm trying to write. >> > > I have two tables. 'stores' and 'zipcodes'. >> > > I want to automatically set the latitude and longitude of the store using >> > > it's zipcode lookup in the zipcode table. >> > > DELIMITER $$; >> > > DROP TRIGGER `store_coord`$$ >> > > create trigger `store_coord` BEFORE INSERT on `stores` >> > > for each row BEGIN >> > > UPDATE stores AS s, zipcodes AS z >> > > SET s.latitude = z.latitude, >> > > s.longitude = z.longitude >> > > WHERE s.zip = z.zip AND s.id = NEW.id; >> > > END; >> > > $$ Lose the UPDATE clause. All you need (and all that's permitted) is SET NEW ... And lose the WHERE clause. It's redundant (also not permitted). If you need a value from another table, DECLARE a var and write a SELECT INTO for it. (BTW, if your database looks up latitude & longitude from zipcodes, why bother copying them into store_coord?) PB This is my first trigger I'm trying to write. I have two tables. 'stores' and 'zipcodes'.I want to automatically set the latitude and longitude ofthe store usingit's zipcode lookup in the zipcode table. DELIMITER $$; DROP TRIGGER `store_coord`$$ create trigger `store_coord` BEFORE INSERT on `stores` for each row BEGIN UPDATE stores AS s, zipcodes AS z SET s.latitude = z.latitude, s.longitude = z.longitude WHERE s.zip = z.zip AND s.id = NEW.id; END; $$First things first ... Updating a row that doesn't exist yet (BEFORE INSERT trigger) doesn't make sense :-) Why not simply adjust it like this: new.latitude := <your looked up latitude> new.longitude := <your looked up longitude> Given that it's a "before insert", modifying the NEW.<column> values, these will be stored in the table.So when I do this: insert into `stores` (id, name, zip) values (10,'testcompany', 14526);I get this error Error Code : 1442 Can't update table 'stores' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.I must not be doing something right, I've tried all these combinations and ALL give that same error message: DELIMITER $$; DROP TRIGGER `store_coord`$$ create trigger `store_coord` BEFORE INSERT on `stores` for each row BEGIN UPDATE stores AS s, zipcodes AS z SET NEW.latitude = z.latitude, NEW.longitude = z.longitude WHERE s.zip = z.zip AND s.id = NEW.id; END; $$ DELIMITER $$; DROP TRIGGER `store_coord`$$ create trigger `store_coord` BEFORE INSERT on `stores` for each row BEGIN UPDATE stores AS s, zipcodes AS z SET NEW.latitude := z.latitude, NEW.longitude := z.longitude WHERE s.zip = z.zip AND s.id = NEW.id; END; $$ DELIMITER $$; DROP TRIGGER `store_coord`$$ create trigger `store_coord` AFTER INSERT on `stores` for each row BEGIN UPDATE stores AS s, zipcodes AS z SET s.latitude = z.latitude, s.longitude = z.longitude WHERE s.zip = z.zip AND s.id = NEW.id; END; $$ What am I doing wrong? |
No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.392 / Virus Database: 268.5.6/339 - Release Date: 5/14/2006
-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]