15 запросов update в один

да из ячейки которая в обрабатываемой строке, как например самое простое
Код:
UPDATE planet SET ruda = ruda + lvl
значит обновление пройдёт по всем строкам в таблице и в каждой возьмёт поле ruda и lvl сделает сложение и присвоит новое значение ячейке ruda, потом перейдёт к следующей строке обработает и т. д. пока всю таблицу не обойдёт потому что нет условия WHERE.
 
теперь возник такой вопрос, как сделать в update insert чтобы отправить приватное сообщение, вот код:

PHP:
mysql_query("UPDATE ".TABLE_PREFIX."planet SET metal_mine =metal_mine + 1, metall_time = 0, postroyka=0 WHERE metall_time < ".mktime(). " AND metall_time >0 AND postroyka = 1")or die (mysql_error());

мне нужно автоматически сделать insert в таблицу message где usr_id(planet)== usr_id(message)

Заранее благодарен, жду помощи!
 
теперь возник такой вопрос, как сделать в update insert чтобы отправить приватное сообщение, вот код:
PHP:
mysql_query("UPDATE ".TABLE_PREFIX."planet SET metal_mine =metal_mine + 1, metall_time = 0, postroyka=0 WHERE metall_time < ".mktime(). " AND metall_time >0 AND postroyka = 1")or die (mysql_error());
мне нужно автоматически сделать insert в таблицу message где usr_id(planet)== usr_id(message)
Заранее благодарен, жду помощи!
насчет если именно автоматом, то можно попробовать тригеры:
Код:
CREATE TRIGGER `onUpdatePlanet` AFTER UPDATE ON `planet`
    FOR EACH ROW BEGIN    
        IF (NEW.metal_mine=OLD.metal_mine+1) and (NEW.metall_time = 0) and (NEW.postroyka=0) THEN	
            insert into message set msg='xxx', set id=NEW.id;
        END IF;	
    END;
|
хотя по мне лучше в данной ситуации юзать подзапросы:
Код:
INSERT INTO message ( msg, id )
SELECT 'bla', (SELECT id
FROM planet WHERE "те же условия что и у update")
 
хотя по мне лучше в данной ситуации юзать подзапросы:
Код:
INSERT INTO message ( msg, id )
SELECT 'bla', (SELECT id
FROM planet WHERE "те же условия что и у update")
[/QUOTE]

дело в том, что после update я уже не могу использовать те-же условия, в связи с тем , что при update я удаляю некие значения, например postroyka = 1 делаю postroyka=0 поэтому отдельный insert не покатит!
 
так можно же первым сделать insert, а вторым update и заключить это, как на пред странице советовали, в транзакцию.
START TRANSACTION;
insert ...
update ...
COMMIT;

так, по мне, будет более кошерно, чем с триггерами, т.к. вся логика в одном sql запросе - и понятнее и для поддержки легче.
 
например с двумя запросами, сначала отправить сообщение всем по условию, а потом по тому же условию сделать обновление
Код:
#insert
INSERT INTO message (user_id, message)
SELECT user_id, '+1 металл'
FROM planet
WHERE metall_time<UNIX_TIMESTAMP() AND metall_time>0 AND postroyka=1;
#update
UPDATE planet 
SET metal_mine=metal_mine+1, metall_time=0, postroyka=0 
WHERE metall_time<UNIX_TIMESTAMP() AND metall_time>0 AND postroyka=1;
 
так можно же первым сделать insert, а вторым update и заключить это, как на пред странице советовали, в транзакцию.
START TRANSACTION;
insert ...
update ...
COMMIT;
так, по мне, будет более кошерно, чем с триггерами, т.к. вся логика в одном sql запросе - и понятнее и для поддержки легче.

Честно говоря никогда не работал с транзакциями, начал читать ничего толком не понял, я так понимаю во время выполнения транзакции таблицы блокируются, а для меня это критично! Воспользуюсь вариантом который был написан постом выше!
 
Назад
Сверху