我的意思是:
create table Measures (
id_user int,
date timestamp,
measure_1 double default 'select measure_1 from Measures where data = '**/**/****'',
measure_2 double default 'select measure_1 from Measures where data = '**/**/****'');
这样我插入了db中保存的最后一个度量值。 有可能吗?
答案 0 :(得分:4)
答案 1 :(得分:4)
您可以通过插入前trigger来完成此操作。
检查NEW.measure_1
是否为空,如果是,则执行选择和存储结果。
<强> UPD:强>
对,我昨天有点匆忙,以后忘了举个例子。触发器是复杂默认值的良好替代品 - 它将透明地工作,看起来就像数据库用户角度的默认值,并且您不必在应用程序级别上执行任何操作,因为触发器存储在数据库中本身。它看起来像这样:
CREATE TRIGGER `measures_bi_trigger` BEFORE INSERT ON `Measures`
FOR EACH ROW BEGIN
if NEW.measure_1 is null then
SET NEW.measure_1 = (select measure_1 from Measures where ... limit 1);
end if;
if NEW.measure_2 is null then
SET NEW.measure_2 = (select measure_2 from Measures where ... limit 1);
end if;
END
您where
条件中的内容并不完全清楚,因此您必须自己替换...
。请注意,您的查询应该只返回一行,因此要么使用MAX
或order by ... limit 1
这样的聚合函数。如果您的查询未返回任何行,则会插入NULL
。