PHP+MySQLで計算結果を格納する方法

このQ&Aのポイント
  • PHP+MySQLを使用して計算結果を格納する方法を教えてください。
  • 現在、フォームから入力された点数Aと点数Bを使用してポイントを計算し、データベースに格納しています。しかし、ポイント算出式が変更された場合や直接データベースに点数を入力する場合には再計算が必要です。
  • Excelでは計算式を変更して全行にペーストするだけで反映されていたので、MySQLで同様の結果を得る方法を教えてください。
回答を見る
  • ベストアンサー

PHP+MySQLで計算結果を格納する方法

「点数A」「点数B」というカラムの計算結果を「ポイント」カラムに格納したい場合、どのような方法があるのでしょうか。 たとえば以下のようなデータを格納する場合 ・計算内容 ポイントカラムに点数A÷100+点数Bを入力。点数Bが80以上なら更に50ポイント追加 点数A 点数B ポイント 10000  100  250 10000  70   170 9000   80   220 現在、フォームから点数A、点数Bを入力し、PHPで ポイント=点数A/100+点数B if(点数B>=80) ポイント=ポイント+50 と計算してから、INSERTしています。(実際にはもう少し複雑な式ですが) しかし、これではいずれポイント算出式に変更があった場合、 再度点数A、点数Bを全て取得して計算し直してからポイントに格納しなおす…という操作が必要になりますよね。 また、これではPHPを介さずに直接データベースの点数を入力する場合は、自力で計算しなければいけません。 もっとうまくやる方法は無いでしょうか? excelでやっていた時は計算式を変えて全行ペーストすれば一瞬で反映されましたが、 MySQLでこういった計算結果の格納はどのようにするのが良いでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

はじめまして。 私もExcelからPHP+MySQLへの移動組です。 どちらにも長所がありますよね。 MySQLはExcelのように数式を埋め込んでおけるデータベースではありません。 今現在、fanta350mlさんはフォームに入力された点数A,点数Bを、MySQLにPHPを介してINSERTされているのですね。 それで、ご希望はPHPを介さずに直接データベースの点数を入力する、でいいのかな。 直接データベースに点数A,点数Bを入力するのにはMySQLコマンドまたはMySQL Query Browserなどのツールを使われると予想して回答します。 テーブル名 tableA 点数A pointA 点数B pointB ポイント pointC としますと、 まず、INSERT INTO tableA (pointA,pointB) VALUE (10000,100),(10000,70),(9000,80); のようにMySQLコマンドで点数A,点数Bを入力します。 この段階でポイントカラムは空です。 次に UPDATE tableA SET pointC= ROUND( pointA / 100) + pointB + CASE WHEN pointB >=80 THEN 50 ELSE 0 END; でポイントカラムに計算結果を入れてやるといいのでは。 PHPも使わずにすみます。 ROUND()で四捨五入の処理を追加しています。 CASE WHEN ~以下で点数Bで80点以上取得した際のみボーナスポイント50点を足してやる処理をしています。 変更後は条件に合わせてこの部分を書き換えてやればいいと思います。 点数に一部変更が出ても一行走らせるだけなのでラクです。 PHPでループを組んでもいいかと思ったのですが確かにMySQLのほうが処理は高速ですね。10万件は一瞬で終わります。 これがfanta350mlさんのご希望にそった回答だといいなと思っていますが、的外れならごめんなさい。 補足してくだされば追加で答えます!

fanta350ml
質問者

補足

すいません、説明足らずでした。入力に関しては ・基本はPHPで入力する。 ・直接データベースに入力することは、稀にある。 一番質問したい部分は ・ポイント計算式に変更が入る(結構入りそう…)ことを想定して、どのような方法で計算するのが良いか? ということでした。 excel関数のように自動で他のカラムから引っ張ったり出来るのだろうか?と思いましたが、流石にそれは難しいようですね。 しかしTarepanda_clubさんのやり方なら、計算に変更が入った場合は、既に入ってるデータはSQLでUPDATEすれば良さそうですね。 ありがとうございます。まずはこの方法で作ってみようと思います。 もし他にも何か良いやり方があればご教示お願いします。

関連するQ&A

  • POSTGRESでMYSQLと同じ結果を得る方法

    create table test (a varchar(10), b varchar(10)); insert into test values ('a','a'); insert into test values ('b','b'); insert into test values ('b','c'); insert into test values ('c','d'); select count(*), a, b from test group by a; 上記を実行するとMYSQLでは +----------+------+------+ | count(*) | a | b | +----------+------+------+ | 1 | a | a | | 2 | b | b | | 1 | c | d | +----------+------+------+ という結果になる。 POSTGRESでは以下のエラーになります。 ERROR: column "test.b" must appear in the GROUP BY clause or be used in an aggr egate function select count(*), a, b from test group by a, b; とすると結果が変わってしまいます。 MYSQLと同じ結果をPOSTGRESで得るいい方法はありますか?

  • mysqlとphpでのデータ表示について

    この度、 mysqlとphpで野球チームのデータ管理サイトを作成しようと思っています。(javascriptも使用予定) お恥ずかしいですが当方の知識としてはmysql+phpの入門書を2週間読んだ段階です。 そこで質問です。 ---------------------------------------------- 例えば、打率を表示したい場合、 計算式は 安打数/打数 ですが、 mysqlで、a(打数)、b(安打数)、c(打率) というカラムがあった場合、 cには (1)mysql上で計算値をinsertするのでしょうか? (2)それともphpスクリプトで計算値をHTMLに吐き出すのでしょうか? ご教授願います。 できれば簡単でいいので手法を教えていただけたらと思います。

    • ベストアンサー
    • MySQL
  • smartyで計算を行う方法

    smartyで複雑な計算を行う場合はどうすればよいのでしょうか? 簡単な計算は、 <{$a/$b}> のように記述出来ますが、カッコを使った方法などはどうすれば良いのでしょうか? 色々と試したり検索しているのですが出来ません。 外部のPHPファイルに各変数の値を渡して計算して元のページに計算結果を戻す、がベストな方法でしょうか? 例えば、$a/($b-$c)という式があったとします。 これをsmartyで計算してその結果を表示する場合、 <{assign var="d" value=$b-$c}> <{$a/$d}> って少しまわりくどい方法なら出来ますが、もっと複雑な式などになる場合、こんな感じで順を追って一つづつ値をアサインして最終的に答えを導き出すのが普通なのでしょうか? もっと簡単にカッコなどを使うことって出来ますか? また、外部にPHPファイルを用意して、そこで計算をして結果を戻してくるって方法も取れるのでしょうか? PHPで計算する方法があるなら、是非教えていただけませんか? フォームなどから外部のPHPに値を渡すなら、 $a = &_POST[$a] って書くのは知っているのですが、smartyの値を渡したり戻したり、って方法が分かりません。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • EXCELの計算結果で+、-、±と表示する方法

    EXCELでA-Bの結果が正の場合は”+符号”、負の場合は”-符号”を付け、等しい場合は”±0”と表示するにはどのようにすればいいのでしょうか? 条件として、事前に複数行にA-Bの式が入力されており、数値未入力(空白)のとき、計算結果セルは空白にしたいのですが。

  • PHP+MySQLで(特殊な)並べ替えをしたい

    例えば、ランクSS~Cの値を格納しているカラムで、 SS>S>A>B>C のような順序でソートをかけたいのですが、 カラムの増設をせずに実現できる方法はありますでしょうか。 それともランクで並べ替える用のカラムを 加えなければできないでしょうか。 なるべくなら、純粋なデータのみをDBに格納して 一機能のためだけのフィールドを作るのは 避けたいと思っているのですが。 可否がわかるかたいらっしゃいましたら お願い致します。

    • ベストアンサー
    • MySQL
  • PHP preg_match_all関数の配列をMysqlに格納したい

    PHP preg_match_all関数の配列をMysqlに格納したい PHP初心者です。 preg_march_all関数を使って正規表現でマッチングする練習を行っています。 preg_march_allを使った場合、マッチングした結果が多次元配列となって出力されると思うのですが、それらをそれぞれのレコードに分けてMysqlに格納したいと思っています。 php入門サイトのものを弄って作ったのですが、 while (! feof($fp)) { $s = fgets($fp); $n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER); for ($i = 0; $i < $n; $i++) mysql_query("insert into seikihyougen1 (benri) value ('$ar[$i][2]')"); } 結果はマッチングした数のレコード分、benriカラムにArray[2]という文字列が入力されてしまいます。 これらをマッチングした文字列に直してMysqlに入れるにはどうすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • MYSQLとPHPの連携について

    MYSQLとPHPで野球チームのデータ管理、WEBで表示 というサイトを作成しようと思っております。 そこで一連の流れについて質問があります。 例えば、打数100 安打数30 の選手がいたとし、 カラムA(打数)   カラムB(安打)   打率  100         30       .300 というのをWEBで表示する場合、 DBにデータをインポートする際、カラムAとBのみインポートし、 打率はmysql側で計算してインポートしてくれるようなことは出来るのでしょうか? 可能な場合、どのような処理を行えばいいのでしょうか? ご教授いただける方、何卒宜しくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLから結果セット取得後の計算方法

    PHP+MySQLから結果セット取得後の計算方法を教えてください。 イメージは以下になります。 以下、testtable とします。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 C 95 30 50 90 D 100 95 85 90 そこで、国語が80点以下の生徒を検索し、抽出した生徒の算数平均点数を導きたいのです。 //国語が80点以下の生徒を抽出 $sql="SELECT * from testtable WHERE 国語<=80"; $rst= mysql_query($sql); 上記で国語が80点以下の生徒を検索出来たと思うのです。 イメージは下記になります。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 算数の平均を求めるので、(80+60)/2の式を書きたいのです。 平均の2は、mysql_num_rows($rst)で導き出せるのですが、 (80+60)の部分がわかりません。 while ($col = mysql_fetch_array($rst)){ $sum=$sum+$col[算数];} $body.= "平均".$sum/mysql_num_rows($rst)."点"; でよいでしょうか。 ご教授願います。

    • ベストアンサー
    • MySQL
  • エクセル2003で、素早く計算結果の表を作る方法

    エクセル2003ですが、 例えば、ある計算式に手動で数値 B1、B2、B3・・・と大量に入力して、 その計算結果をA1、A2,A3・・・と画像のように多くの計算結果を素早く表にしたいのですが、そんな方法はありますでしょうか? エクセル初心者ですが、よろしくお願いいたします。

  • PHPから他のPHPにPOSTして結果を得る方法

    a.phpから他サーバーにあるb.phpに入力されたデータをPOSTで送り、b.phpの「登録が完了しました」といった出力結果を、a.phpで処理したいと考えています。 PHPからPOST送信し、その結果を取得するにはどういった関数やコードがあるかを知りたいです。 よかったら回答をお願いします。

    • ベストアンサー
    • PHP