как реализовать вывод формулы подсчета из б/д.
Помогите, пожалуйста! Мне нужно реализовать такую задачу. В б/д находится разные формулы подсчета, например:
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, время: 01:24. |