MySQL / PHP хранение формулы

дилемма:

у меня есть опции, которые должны хранить данные о ценах.

каждый вариант может иметь другую формулу для определения его стоимости.

например, общая стоимость одного варианта будет стоить * кв. футов, но другой вариант будет стоить * периметр футов, в то время как другой вариант по-прежнему будет просто фиксированной стоимостью.

эти параметры извлекаются из базы данных несколькими сайтами, которыми владеет моя компания.

каждый из этих сайтов необходимо иметь возможность рассчитать цены опционов точно таким же образом.

в настоящее время у нас есть PHP-код на каждом сайте, который извлекает данные из базы данных, а затем определяет, как его вычислить.

проблема с этим методом заключается в том, что мы иногда меняем способ расчета цены, и когда это происходит, мы должны отредактировать репозиторий модуля ценообразования, а затем обновить его на каждом сервере, на котором размещен один из этих сайтов.

Я ищу лучшее решение.

Я играю с идеей хранения формулы в записи опции в базе данных, тогда каждому сайту просто нужно будет вызвать опцию, применить данные к формуле, хранящейся там, а затем запустить формулу.

теперь это можно сделать с помощью eval(), но я действительно не хочу делать это таким образом.

пример Eval, чтобы дать вам более четкое представление о том, что я пытаюсь сделать:

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

у кого-нибудь еще есть другое решение?

1 ответов


использовать функции.

псевдо-код:

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)...

таким образом, вы можете обновить любые изменения в своей функции, и запросы с помощью функции приведут к тому же результату.