Обновлять все поля в журнальной таблице после каждого обновления - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть этот триггер для обновления одного поля в таблице журнала после каждого обновления, но мне нужно обновить ВСЕ столбцы в связанной строке в журнале сразу, не называя каждый из них и разделяя запятой, как я могу это сделать?что?

    DELIMITER //
    CREATE TRIGGER sfo_clone_update_subtotal_invoiced AFTER UPDATE ON sales_flat_order
    FOR EACH ROW BEGIN
        update sales_flat_order_journal set subtotal_invoiced=NEW.subtotal_invoiced where entity_id=new.entity_id;
    END;
DELIMITER ;

1 Ответ

0 голосов
/ 17 февраля 2019

Синтаксис UPDATE позволяет вам установить несколько столбцов, разделенных запятыми.

update sales_flat_order_journal 
set subtotal_invoiced = NEW.subtotal_invoiced,
    other_column1 = NEW.other_column,
    other_column2 = (/* constant expression, not based on NEW */),
    other_column3 = (SELECT ...scalar expression from some other tables... LIMIT 1),
    updated_at = NOW() 
where entity_id = new.entity_id;

Вы можете получить доступ к NEW.other_column, чтобы получить значения той же строки, которая породила триггер.

Вы можете объявить локальные переменные в своем теле триггера, чтобы помочь вычислить сложные значения.

Вы можете использовать SELECT операторы в вашем теле триггера для запроса значений из других строк или других таблиц, еслитак как вы используете скаляр SELECT, который возвращает одну строку и один столбец.

Если вам нужно более сложное обновление, которое слишком сложно выполнить в триггере, я сделал бы это в коде приложения, а не в триггере.

...