BugZZ
18-09-2009, 09:51
Доброго времени суток.
Вобщем ситуация такая - есть две таблицы.
client (cID, name, firstname, adress,...)
task (tID, old_adress, new_adress, done [ENUM ('YES','NO')], cID) <- где cID - foreign key
задумка такая.
У клиента есть адресс. Например, client(1, 'pupkin', 'vasja', 'Oldstreet 1',.......)
В таблице task есть ЗАДАНИЕ на переезд этого клиента со старого [old_adress] адресса на новый [new_adress]. Статуст [done], который автоматически ставиться на НЕ СДЕЛАН (NO) Например - (5, 'oldstreet 1', 'newstreet 35', NO, 1)
Надо что бы после изменения статуса [done] на ВЫПОЛНЕН (YES) в таблице task, новый адресс [new_adress] из этой же таблицы заменял АДРЕСС [adress] в таблице client
тоесть "пешком" это выглядело бы так.
/* Юзер обновляет статус на ВЫПОЛНЕН [DONE->YES] */
UPDATE task SET done = 1 where tID = 5
получается:
task (5, 'oldstreet 1', 'newstreet 35', YES, 1)
после чего обновляется таблица client
/* Замена старого адресса в таблице client новым [new_adress] из task */
UPDATE clien SET adress = (SELECT new_adress FROM task WHERE tID = 5 AND cID = 1) where cID = 1
получается:
(1, 'pupkin', 'vasja', 'newstreet 35',.......)
Так то все работет, вот только хотелось бы чтоб все было не "пешком" а происходило автоматом ПОСЛЕ обновления task, тобишь нужен триггер/процедура.
Я уже пробовал что-то настряпать, но ...ума не хватает
CREATE TRIGGER update_old_ardess
AFTER UPDATE ON task
FOR EACH ROW BEGIN
IF NEW.done = 1 THEN
UPDATE client SET OLD.adress =
/* ... a вот тут я не знаю как дальше ..и так ли оно вообще */
/* надо же чтоб не всем адреса но новые поменялись а только тем у кого ID совпадают...*/
END IF;
END;
Заранее спасибо.
ЗЫ. Модераторы, пожалуйста, исправте ошибку в заголовке. Вместо Автозамена строки из другой строки - trigger? procedure ? исправте на Автозамена строки из другой таблицы - trigger? procedure ?
Вобщем ситуация такая - есть две таблицы.
client (cID, name, firstname, adress,...)
task (tID, old_adress, new_adress, done [ENUM ('YES','NO')], cID) <- где cID - foreign key
задумка такая.
У клиента есть адресс. Например, client(1, 'pupkin', 'vasja', 'Oldstreet 1',.......)
В таблице task есть ЗАДАНИЕ на переезд этого клиента со старого [old_adress] адресса на новый [new_adress]. Статуст [done], который автоматически ставиться на НЕ СДЕЛАН (NO) Например - (5, 'oldstreet 1', 'newstreet 35', NO, 1)
Надо что бы после изменения статуса [done] на ВЫПОЛНЕН (YES) в таблице task, новый адресс [new_adress] из этой же таблицы заменял АДРЕСС [adress] в таблице client
тоесть "пешком" это выглядело бы так.
/* Юзер обновляет статус на ВЫПОЛНЕН [DONE->YES] */
UPDATE task SET done = 1 where tID = 5
получается:
task (5, 'oldstreet 1', 'newstreet 35', YES, 1)
после чего обновляется таблица client
/* Замена старого адресса в таблице client новым [new_adress] из task */
UPDATE clien SET adress = (SELECT new_adress FROM task WHERE tID = 5 AND cID = 1) where cID = 1
получается:
(1, 'pupkin', 'vasja', 'newstreet 35',.......)
Так то все работет, вот только хотелось бы чтоб все было не "пешком" а происходило автоматом ПОСЛЕ обновления task, тобишь нужен триггер/процедура.
Я уже пробовал что-то настряпать, но ...ума не хватает
CREATE TRIGGER update_old_ardess
AFTER UPDATE ON task
FOR EACH ROW BEGIN
IF NEW.done = 1 THEN
UPDATE client SET OLD.adress =
/* ... a вот тут я не знаю как дальше ..и так ли оно вообще */
/* надо же чтоб не всем адреса но новые поменялись а только тем у кого ID совпадают...*/
END IF;
END;
Заранее спасибо.
ЗЫ. Модераторы, пожалуйста, исправте ошибку в заголовке. Вместо Автозамена строки из другой строки - trigger? procedure ? исправте на Автозамена строки из другой таблицы - trigger? procedure ?