MySQL получить значение поля перед удалением - PullRequest
0 голосов
/ 16 апреля 2011

У меня проблема!У меня есть таблица вложений.Я храню имя файла в этой таблице.Моя таблица категорий и вложение имеют отношение друг к другу, если удаление категории, связанные записи во вложении также удалены, но я хочу получить имя файла из вложения перед его удалением!

Что мне делать?

DELETE c, a category c 
  JOIN attachment a ON c.id = a.extId 
 WHERE c.lft BETWEEN @left AND @right

Я хочу получить значение имени файла (поле вложения) перед его удалением в верхнем запросе

Ответы [ 3 ]

3 голосов
/ 17 апреля 2011

Создать триггер

DELIMITER $$

CREATE TRIGGER ad_attachment_each AFTER DELETE ON attachment FOR EACH ROW
BEGIN
  INSERT INTO deleted_attachments (id, attachment_id, filename, timestamp) 
    VALUES (null, old.id, old.filename, NOW());
END$$

DELIMITER ;

Этот триггер будет запускать after каждые delete for each row, которые удаляются из вложения и добавят строку в таблицу "ched_attachments ".

Есть триггеры BEFORE и AFTER любого действия.
Действие может быть DELETE, INSERT, UPDATE.Доступ к значениям до изменения можно получить с помощью виртуальной таблицы old.Доступ к значениям после изменения можно получить с помощью виртуальной таблицы new.Здесь я использовал значения old, потому что delete явно не имеет значений new.

Подробнее о триггерах см .:
http://dev.mysql.com/doc/refman/5.1/en/triggers.html

Илипоиск в стеке mysql triggers

2 голосов
/ 16 апреля 2011

Выполните два запроса, первый select с одинаковыми join и where, а второй ваш delete запрос:

SELECT attachment.filename 
FROM attachment AS a 
JOIN category AS c ON c.id = a.extId 
WHERE c.lft BETWEEN @left AND @right
1 голос
/ 16 апреля 2011

Запросы на удаление не возвращают значений, поэтому я предлагаю вам заранее выполнить простое утверждение select, чтобы получить имя файла.Затем перейдите к оператору удаления.

...