Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Автозамена строки из другой строки - trigger? procedure ? (http://forum.oszone.net/showthread.php?t=150846)

BugZZ 18-09-2009 09:51 1221626

Автозамена строки из другой строки - 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

тоесть "пешком" это выглядело бы так.

PHP код:

/* Юзер обновляет статус на ВЫПОЛНЕН [DONE->YES] */
UPDATE task SET done 1 where tID 

получается:
task (5, 'oldstreet 1', 'newstreet 35', YES, 1)
после чего обновляется таблица client
PHP код:

/* Замена старого адресса в таблице client новым [new_adress] из task */
UPDATE clien SET adress = (SELECT new_adress FROM task WHERE tID AND cID 1where cID 

получается:
(1, 'pupkin', 'vasja', 'newstreet 35',.......)
Так то все работет, вот только хотелось бы чтоб все было не "пешком" а происходило автоматом ПОСЛЕ обновления task, тобишь нужен триггер/процедура.

Я уже пробовал что-то настряпать, но ...ума не хватает


PHP код:

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 ?


Время: 12:15.

Время: 12:15.
© OSzone.net 2001-