MySQL - 使用基于另一个表的值填充表字段

时间:2013-10-31 15:52:49

标签: mysql sql foreign-keys relationship

我有两张表:countdowntime_limit

countdown:
    -------    ---------    ---------    -------
    cnt_id     tlimit_id    cnt_start    cnt_end
    -------    ---------    ---------    -------
    1          1            08:00:00     x
    2          3            09:00:00     y

time_limit
    ---------    ----------
    tlimit_id    tlimit_val
    ---------    ----------
    1            00:30:00
    2            01:00:00
    3            01:30:00

所以x = 08:30:00 而y = 10:30:00

我的问题是:有没有办法可以设置数据库表(没有php脚本),所以cnt_end的值总是(cnt_start)PLUS(tlimit_val)?

2 个答案:

答案 0 :(得分:0)

如果要从数据库中提取值,则可以使用此查询

select countdown.cnt_id,countdown.tlimit_id,countdown.cnt_start,(countdown.cnt_start+time_limit.tlimit_val) AS cnt_end from countdown INNER JOIN  time_limit on countdown.tlimit_id = time_limit.tlimit_id;

答案 1 :(得分:0)

根据Goat CO的建议,您可以在countdown表格的顶部创建一个视图,以自动在cnt_end列中插入计算值。

CREATE VIEW magic_countdown AS
SELECT a.cnt_id, a.tlimit_id, a.cnt_start, a.cnt_start + b.tlimit_val AS cnt_end
FROM countdown a, time_limit b
WHERE a.tlimit_id = b.tlimit_id;

在SQL语句中使用magic_countdown来插入数据而不是countdown

另一种方法是使用触发器。

CREATE TRIGGER triggername AFTER INSERT (or UPDATE)
ON countdown
FOR EACH ROW
UPDATE countdown SET countdown.cnt_end=time_limit.tlimit_val+countdown.cnt_start WHERE countdown.tlimit_id = time_limit.tlimit_id

请参阅MySQL Documentation for Triggers