2013-08-06 2 views
1

Пытается создать поле в таблице, которое получит старое значение другого поля. Моя таблица очень похожа на это:Поле истории в базе данных MySQL

------------ -------------------- ------------------------ 
| id int(10) | price decimal(5,2) | price_old decimal(5,2) | 
---------------------------------------------------------- 

То, что я пытаюсь получить это значение price поля копируется в поле price_oldON UPDATE текущей записи.

Можно ли достичь этого только с помощью mysql?

PS: Данные, содержащиеся в этой ячейке, не являются критическими. Использование заключается в сохранении предыдущей цены товара и после того, чтобы показать, как он изменился. Мне нужно только последнее значение, а не полная история записи в таблице. (Мой сервер MySQL равен 5.0, если это имеет значение)

+1

Извините, что я отредактирую. Я имел в виду поле «цена» в поле «price_old» –

ответ

1

Используйте triggers по правилу обновления. Там установлено значение цены на price_old

CREATE TRIGGER `update_price_old` 
    BEFORE UPDATE ON `table_name` FOR EACH ROW 
    BEGIN 
    UPDATE `table_name` SET price_old = OLD.price where OLD.id = id; 
    END 
+0

se мой комментарий к ответу @ DwB :) –

+0

Проверить сейчас. Обновлено с помощью примера. (NB: NOT TESTED) –

4

Да, вы можете использовать BEFORE UPDATE триггер (documentation).

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

DELIMITER $$ 
CREATE TRIGGER `price_trigger` 
BEFORE UPDATE ON `products` 
FOR EACH ROW 
BEGIN 
    IF NEW.price != OLD.price 
     SET price_old = OLD.price; 
    END IF; 
END$$ 
DELIMITER ; 
Смежные вопросы