Задать вопрос
@xiiicool

Можно ли в mysql получить результат выражения из строки?

У менять есть столбец где написаны формулы вида = 3*(USD)+2
Есть функция которая подставляет курс и в итоге SELECT calc_formula_usd_byn(formula) я получаю строку '3*0.30+2', в mysql функции вроде динамически нельзя подсчитать результат
  • Вопрос задан
  • 179 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@rPman
Используй динамические запросы, напиши с помощью create function свою, в которой с помощью prepare и execute исполняй sql запрос, собираемый из твоей строки в таблицу плюс добавив нужные таблицы, потребность в таблицах нужно будет как то вычислять, анализируя выражение, либо задавать дополнительным полем (рекомендую этот анализ и формирование динамического sql запроса выполнять в тригерах или отдельным вызовом, который ты будешь вызывать после обновления своих формул), вот пример если используются только одна таблица, а логика фильтрации в ней заранее понятна:
set sql=concat('select ',expr,' into @result from my_table where id=',id)
prepare stmt from sql;
execute stmt;
deallocate prepare stmt;
set result = @result;
return result;

в этом случае expr будет в формате sql а имена переменных из таблицы

Если таблиц будет несколько, то добавляй имена таблиц, а анализ запроса делай через поиск "имя_таблицы." и делай соответствующий join и фильтрацию по индексам foreign и primary key (не советую делать мега алгоритм, разбирающий всю базу по структурам, хотя если запилишь, будет наверное мощная и полезная система, скорее всего у тебя будет 2-3 запроса, и нужно будет только понять, когда какой использовать)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы