2013-08-29 4 views
0

Я получил таблицу с именем tbl_requests и tbl_friends, я знаю, что запрос о том, как выбрать определенную строку из tbl_requests и вставить его в tbl_friends по ID.Выберите из таблицы и вставить в другую таблицу и удалить его из исходной таблицы

Моя проблема теперь в том, как я могу удалить строку из tbl_requests после ее выбора и вставить ее в tbl_friends.

Вот мой запрос в SELECT от tbl_requests и INSERT к tbl_friends:

INSERT INTO tbl_friends 
    SELECT * 
     FROM tbl_requests 
     WHERE ID = 1 

Что я могу добавить, так что строка из tbl_requests будут удалены?

+0

Вы можете создать свою собственную хранимую процедуру, которая будет выполнять оба утверждения. Я не вижу никакого «прямого метода sql». –

+1

У вас может быть только одна таблица с флагом, указывающим, был ли запрос принят. –

+0

@ Gordon Linoff Это хороший момент! –

ответ

3

Посмотрите: MySQL Trigger - delete after update

Что вы хотите, чтобы вызвать удаление после вставки.

DELIMITER $$ 
CREATE TRIGGER trigger1 
    AFTER INSERT 
    ON tbl_friends 
    FOR EACH ROW 
BEGIN 
    DELETE FROM tbl_requests WHERE ID = new.id; 
END 
$$ 
+0

ок. я попробую это. tnx :) – James

+0

Я дал ему попробовать свою собственную БД и работал ... если это не говорит :) –

+0

да, я буду. tnx – James

1

Это не может быть сделано в традиционном sql с одним заявлением. Все дело в том, чтобы сделать именно это. Используйте

begin; 
insert into tbl_friends (a,b,c) select u,v,w from tbl_requests where id = :myid; 
delete from tbl_requests where id = :myid; 
commit; 

Вы также можете использовать триггер на tbl_friends, которая удаляет строку из tbl_requests, где вставлена ​​новая строка.

+0

Я думал, что это возможно только в одном заявлении. ну, tnx за то, что вы мне посоветовали :) – James

+0

@James: возможно с одним утверждением - просто не с MySQL –

Смежные вопросы