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 に答える