6

困境:

我有需要存储定价数据的选项。

每个选项都可以有不同的公式来确定其成本。

例如,一个选项的总成本将是成本 * 平方英尺,但另一个选项将是成本 * 周长英尺,而另一个选项仍然只是固定成本。

我公司拥有的几个站点正在从数据库中提取这些选项。

这些网站中的每一个都需要能够以完全相同的方式计算期权定价。

我们目前在每个站点上都有 PHP 代码从数据库中提取数据,然后确定如何计算它。

这种方法的问题在于,我们有时会更改价格的计算方式,当发生这种情况时,我们必须编辑定价模块存储库,然后将其更新到托管这些站点之一的每台服务器。

我正在寻找更好的解决方案。

我正在考虑将公式存储在数据库的选项记录中的想法,然后每个站点只需要调用选项,将数据应用于存储在那里的公式,然后运行公式。

现在,这可以用 来完成eval(),但我真的不想那样做。

评估示例让您更清楚地了解我正在尝试做什么:

$product->width = 3;
$product->length = 4;
$formula = $option->cost_formula; // $product->width * $product->length * $option->cost
eval($formula);

还有其他人有其他解决方案吗?

4

1 回答 1

4

使用函数

伪代码:

CREATE FUNCTION calculation1 (@cost decimal(6,2), @feet int)
RETURNS decimal(7,2)
AS
BEGIN
    --Other formula calculations
    RETURN @cost * @feet
END

然后,您将从查询中调用该函数:SELECT calculation1('1.50', 15)...

这样,您可以更新对函数的任何更改,并且使用该函数的查询将产生相同的结果。

于 2012-08-31T18:19:01.713 回答