- ベストアンサー
テーブル中に式(計算方法)を記録し、その式を実行する方法
- テーブルに記録された式(t_formula.formula)の計算結果を得る方法について教えてください。
- t_valueテーブルとt_formulaテーブルを使用して、指定した条件に応じた結果を取得するSQLを作成する方法について教えてください。
- t_formulaテーブルの式を実行し、計算結果を取得するためのSQLを作成する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
通りすがりのSEです。 分岐する計算式の数が数個である条件であれば、 「CASE文」が使えるかもしれません。 例)SELECT CASE WHEN jouken = 1 THEN a+b WHEN jouken = 2 THEN a*b-20 END hoge FROM tbl_sample; みたいな感じで(クエリの列名が"hoge")。 (※お使いの環境に応じてSQLは工夫してください。) 外していたらごめんなさい。 あと、ご質問の際は必ずご利用の環境(OSやMySQLのバージョン情報等)の記載をお忘れなく。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1回答者です。 MySQL 5.0以降を使用し、以下の条件でも構わないなら、希望に近いことが実現できるかも知れません。 (1)formula列に格納する計算式 「a*b-20」ではなく、「func1(a)*func1(b)-20」といった内容で、文字形式で格納する。 (2)ストアド・ファンクション=func1を作る。 t_value表をkey列をキーとして検索し、value列を返す (3)ストアド・プロシジャを作り、id列値を入力引数にし、(1)で格納した式(文字データ)を検索し、得られた式をSQL文の一部として動的実行する。 call文でストアド・プロシジャを呼び、内部ではprepare文とexecute文を実行する形になります。 最終的な計算結果を、表示するだけでなく変数で受け取りたいなら、一工夫必要になる。
- chukenkenkou
- ベストアンサー率43% (833/1926)
どういう発想をしたら、こういう質問が出てくるのでしょうか? この質問をする上で、自分で何らかの調査をしましたか? 標準SQLなどで、オブジェクト指向に対応するために抽象データ型という考え方がありますが、MySQLでは未サポートであり、質問者さんの「表計算ソフト」的な発想とは違うものです。 文字列からSQLを組み立てて実行するというのは、「SQLの動的実行」と呼ばれ、MySQLでも5.0からサポートされています。しかし、RDBMS側では「文字列」としてしか認識しないので、「別表から値を持っきて入れる」といったことは、利用者側で解決しなければならないことです。
補足
幼稚な発想で誠に申し訳ございませんでした、はい。