как реализовать вывод формулы подсчета из б/д.
Помогите, пожалуйста! Мне нужно реализовать такую задачу. В б/д находится разные формулы подсчета, например:
a*(b+c*d). Переменные a,b,c и d задаются в полях формы. Как сделать, чтобы эти данные подсчитывались по разным формулам? |
SELECT field_a * (field_b + field_c * field_d) result
|
PS. Надо добавить, что запрос указанный должен выполняться как хранимая процедура, то есть непосредственно выполнить описанную в поле таблицы формулу нельзя, но можно держать ссылку на хранимую процедуру.
Если с хранимыми процедурами не получится, то можно в поле хранить не формулу, а ссылку на функцию ее выполняющую, которая будет выполнена после выборки из базы. Например, в таблице 5 полей из которых первые четыре, это значения переменных a, b, c, d, а пятое ссылка на функцию "name_1":
$func = array(
'name_1' => function($v) {
return $v[0] * ($v[1] + $v[2] * $v[3]);
}
);
$q = mysql_fetch_row(mysql_query('SELECT * FROM table_name'));
echo $func[$q[4]](array_slice($q, 0, 4));
|
Цитата:
Опять же как взять имена полей из формулы в тексте. Ну если там как в примере, то регой выкинуть всё что не текст и разбив на букавки отрендерить поля с именами по буковкам. Потом replace значений и eval. Если формулы в процедуре, да и вообще если и в тексте, в стопицот раз проще написать на каждую свою модель, при условии что они каждые 5 минут не меняются, конечно. |
Спасибо, сделал таким способом:
<script>
function formul(a, b, c, d){
return <?= mysql_fetch_row(mysql_query('SELECT formula FROM table_name')) ?>;
}
</script>
Это вставил в код страницы, потом вызвал и подставил данные из формы. |
То есть это надо выполнять обязательно на клиенте? Ну тогда уж отдавать ему объект описывающий данные для формул, а не return <?= mysql_fetch_row....
|
YegorSSS,
:)
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<form action="http://">
<label for="">a = <input type="text"></label>
<label for="">b = <input type="text"></label>
<label for="">c = <input type="text"></label>
<label for="">d = <input type="text"></label>
<p></p>
</form>
<script>
var f = ["a*(b+c*d)", "a+b+c+d", "(a+b)*(c+d)", "a+b", "++a"],
inp = document.querySelectorAll("input"),
p = document.querySelector("p"),
factory = function(a) {
return new Function(a.match(/\w+/g), "return " + a)
},
fn = function(a) {
return a.value = +a.value || 0;
},
res, arr;
document.forms[0].onchange = function() {
arr = Array.prototype.map.call(inp, fn);
res = "";
f.forEach(function(a) {
var b = 0,
c = a.replace(/\w+/g, function() {
return arr[b++]
});
res += a + " => " + c + " => " + factory(a).apply(this, arr) + "<br>"
});
p.innerHTML = res
};
</script>
</body>
</html>
|
Цитата:
Хранимые процедуры нужны там, где клиент не детерминирован или скорее скомпилирован. Напрягите извилину. Есть 1 база и 100 клиентов, разных, готовых, ну какие-то там приложения на десктопе или на сервере через терминал - не важно. Важно что вы не можете взять и дописать им всем модельку подсчета чего-нить с какой-нить таблицы. Это невозможно. Тогда вы, как инженер баз данных - пишите процедуру прямо в самой базе данных и у всех чпок - считается-выбирается-сохраняется-реплицируется и тп - как полагается. А нахрена козе баян для сайта на каком-нить php и js, где за час можно сгенерить сотню моделей и все будет работать как доктор прописал. Кстати на моем федеральном хостинге нельзя создать ни вьюху ни хранимку. Потому что и не надо. |
Цитата:
|
Згинь гнида шелудивая, бабку свою будешь удивлять своим "гениальными словами", для меня ты пустышка. Не дай бог еще раз попадешься под руку,изловлю щенка, сниму штаны и набью морду. )
|
| Часовой пояс GMT +3, время: 11:44. |