1

可能重复:
创建一个触发器,当另一个表中的列更新时更新一个表上的列

我有一个包含这些值的数据库表

UpVotes | DownVotes | PercentVotes
8       | 2         | 80
10      | 0         | 100
5       | 5         | 50
560     | 34        | 94

是否可以让 mysql 数据库像这样工作:

UpVotes | DownVotes | PercentVotes
8       | 2         | (UpVotes/(UpVotes + DownVotes)) x 100 = 80
10      | 0         | (UpVotes/(UpVotes + DownVotes)) x 100 = 100
5       | 5         | (UpVotes/(UpVotes + DownVotes)) x 100 = 50
560     | 34        | (UpVotes/(UpVotes + DownVotes)) x 100 = 94

无需通过任何脚本自动更新?就像在 excel 中一样,您可以更改 UpVotes 值或 DownVotes 值,并且 PercentVotes 值会根据总票数自动成为新的正确百分比。

对不起我的英语不好,但我希望你明白我的意思。:)

4

5 回答 5

7

你可以使用 a trigger。像这样的东西:

delimiter |
CREATE TRIGGER calc_percentages BEFORE INSERT on your_table
FOR EACH ROW
BEGIN
    SET NEW.PercentVotes = NEW.UpVotes/(NEW.UpVotes + NEW.DownVotes);
END
|
delimiter ;

它将在每次插入时运行并添加计算值。如果您希望它在 an 之后更新,update那么只需添加另一个触发器after update而不是before insert.

由于百分比信息是一个计算值,您可以在您的选择中即时计算它,而不是将其存储在您的数据库中。但是,如果您真的需要性能增益,请使用触发器来存储它。

于 2012-11-16T16:15:59.720 回答
0

你会想在选择上运行这样的东西,你可能需要检查数学。

select UpVotes, DownVotes ((UpVotes / (UpVotes + DownVotes)) * 100) as PercentVotes from my_table;
于 2012-11-16T16:21:22.117 回答
0
delimiter //
CREATE TRIGGER ins_votepercent BEFORE INSERT ON votetable FOR EACH ROW 
  SET NEW.PercentVotes = (NEW.UpVotes/(NEW.UpVotes+NEW.DownVotes)) * 100  
  END;//

CREATE TRIGGER upd_votepercent BEFORE UPDATE ON votetable FOR EACH ROW 
  SET NEW.PercentVotes = (NEW.UpVotes/(NEW.UpVotes+NEW.DownVotes)) * 100 
  END;//

MySQL 手册

于 2012-11-16T16:26:10.677 回答
0

对的,这是可能的。您可以使用触发器。只需在更新和插入时设置触发器,它就会改变列的值。

于 2012-11-16T16:21:40.080 回答
0

如果您正在使用触发器,请尝试这样的事情

delimiter |

CREATE TRIGGER insertPercentVotes AFTER INSERT ON YourTableName

// calculate percentage here
      // Execute Update query here  
 END;
|
于 2012-11-16T16:24:26.837 回答