Mysql автозаполнение поля на основе значения двух других полей? - PullRequest
2 голосов
/ 25 февраля 2010

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

CREATE TABLE pligg_links (
  ...
  link_votes INT,
  link_reports INT,
  link_votes_total INT,
  ...
);

Поле link_votes_total должно содержать значение поля link_votes, вычтенное из link_reports. В общем, это математическое уравнение: link_votes_total = link_votes - link_reports. Возможно ли это без необходимости использовать php перед сохранением данных?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Да, это можно сделать, создав триггер для BEFORE INSERT и еще один для BEFORE UPDATE:

DELIMITER //

CREATE TRIGGER trig_mytable BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports;
END
//

CREATE TRIGGER trig_mytable BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports;
END
//

DELIMITER ;

Дополнительная литература:

1 голос
/ 25 февраля 2010

См: http://dev.mysql.com/doc/refman/5.1/en/triggers.html

DELIMITER //

CREATE TRIGGER bir_links
BEFORE INSERT ON links
FOR EACH ROW 
BEGIN
    SET link_votes_total = NEW.link_votes - NEW.link_reports;
END;
//

CREATE TRIGGER bur_links
BEFORE UPDATE ON links
FOR EACH ROW 
BEGIN
    SET link_votes_total = NEW.link_votes - NEW.link_reports;
END;
//

DELIMITER ;
...