交叉表引用

时间:2012-11-09 20:04:24

标签: php mysql cakephp

嗨,大家好,这可能会引起一些奇怪的问题,但这里有:

这只是一个基本的例子,所以你可以理解我想要实现的目标。

如果我有一个带有两个表的mysql数据库:“liquid_avaliable”和“liquid_records”。 liquid avliable将有3列id,名称,金额。 liquid_records将具有id,name,amount_used,liquid_avaliable_id。

每次添加“液体记录”是否有可能从可用表格中减去该金额。

目的是让你可以快速检查一下液体可用表,看看你剩下多少钱。

如果有人能指出我正确的方向,那将非常感激。

我正在处理的应用程序是用“cakePHP”构建的,我的数据库系统是mysql,尽管Postgre sql也是可用的。

提前致谢。

2 个答案:

答案 0 :(得分:1)

你有几种方法可以解决这个问题。

(1)您无能为力,并在运行时计算可用金额。对于合理的硬件和适度大小的数据,这可以是可接受的解决方案。性能应该合理,甚至高达数十万行。

(2)规范数据库解决方案是使用触发器。在“液体记录”表上创建一个触发器。添加新记录时,从另一个表中减去或添加金额。

(3)使用存储过程对表进行所有插入。这是我的首选方法。然后,存储过程可以递增或递减其他值(如果需要,还可以执行日志记录和其他操作)。

我建议您将所有数据操作包装到存储过程中,但继续执行(1)。编写查询以从数据结构中获取所需内容。根据需要添加索引。如果这不起作用,则进入(3)。

答案 1 :(得分:1)

是的 - 您可以使用afterSave()回调方法。

保存LiquidRecord时会自动触发 - 此时您可以添加逻辑以重新计算并将新总数保存到LiquidAvailable模型。

另一种选择是研究CakePHP's Event System