我有一个名为“character”的mysql数据库表,其中包含名称,力量,智力,技能等列。我想创建一个自动总结力量,智力和技能的专栏。这可能吗?
我看到很多页面显示了如何进行查询。我做了一个查询就好了,比如 选择(str + intel + skl)作为字符的总和; 它返回一个总和就好了。
但我缺少的(不明白)是如何:
一个关键点,我在一行(力量,智力,技能)上总结列,而不是对一列(几个字符的强度)求和。
答案 0 :(得分:3)
您最好的选择是使用触发器(或应用级别的类似代码)。
使用视图也有效,但如果您经常需要它,则会出于性能原因而预先计算它。
有关触发器的介绍,请参阅:
http://dev.mysql.com/doc/refman/5.6/en/triggers.html
你可能想要这样的东西:
CREATE TRIGGER character_sum_ins BEFORE INSERT ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;
CREATE TRIGGER character_sum_upd BEFORE UPDATE ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;
或者,预先计算应用中的总和并相应地存储它。
旁注:问问自己是否真的需要这个存储。正如另一位评论者指出的那样,可能根本不需要自动计算数据。
答案 1 :(得分:1)
这应该有效,如果我正确理解你的问题,力量,智力,技能列是数字数据类型。
select strength, intelligence, skill, strength+intelligence+skill as sum
from character
根据建议,可以使用以下方法轻松创建视图:
create view totals as
select strength, intelligence, skill, strength+intelligence+skill as sum
from character
答案 2 :(得分:0)
您可能希望将其转换为存储过程。该过程可以进行计算,您可以将结果看作是列。
您也可以使用这个用例的简单视图。
答案 3 :(得分:0)
不要在mysql中执行此操作,只需在显示时添加值,严重。
或者如果你真的想要,在返回它们时在SELECT语句中将它们加到mysql中。
不要只使用触发器来维持一些数字 - 这是一种让所有未来开发者混淆在项目上的严重方法。