champ de calcul mysql stockée dans un autre domaine
-
27-09-2019 - |
Question
Je champs dans une base MySQL qui ressemble à ceci:
Constant1, constante2, variable1, variable2, formule
Le champ de formule stocke une formule utilisant Constant1, constante2, variable1 et variable2.
Par exemple, le champ de formule peut contenir un calcul comme ceci:
* constante1 variable1
Quand j'utilise une instruction select comme ceci:
SELECT constant1, constant2, variable1, variable2, formula
FROM table
Comment puis-je récupérer le résultat du calcul de constant1 * variable1
basé sur champ de formule?
La solution
Vous avez besoin d'une des deux approches:
- Appelez une sorte de fonction
eval
sur votre formule. - Parse la formule dans un arbre d'expression, remplacer les valeurs et évaluer l'expression.
Usig eval
est rapide à mettre en œuvre mais dangereuse parce qu'elle pourrait faire quelque chose que vous ne vous attendiez pas. La formule est Parsing mieux fait avec une bibliothèque dédiée à la construction de parseurs, mais si votre syntaxe d'expression est très simple, vous pouvez écrire vous-même analyseur sans utiliser une bibliothèque. Dans les deux cas SQL n'est pas la bonne langue pour cela.
Je vous recommande de trouver une bibliothèque qui peut vous aider à analyser la formule. Quelle que soit la voie que vous choisissez bien, je vous suggère de faire le gros du travail sur la base de données client, pas dans SQL. SQL est tout simplement pas conçu pour ce genre de tâche.