「点数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さんのご希望にそった回答だといいなと思っていますが、的外れならごめんなさい。
補足してくだされば追加で答えます!
この回答への補足
すいません、説明足らずでした。入力に関しては
・基本はPHPで入力する。
・直接データベースに入力することは、稀にある。
一番質問したい部分は
・ポイント計算式に変更が入る(結構入りそう…)ことを想定して、どのような方法で計算するのが良いか?
ということでした。
excel関数のように自動で他のカラムから引っ張ったり出来るのだろうか?と思いましたが、流石にそれは難しいようですね。
しかしTarepanda_clubさんのやり方なら、計算に変更が入った場合は、既に入ってるデータはSQLでUPDATEすれば良さそうですね。
ありがとうございます。まずはこの方法で作ってみようと思います。
もし他にも何か良いやり方があればご教示お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- Excel(エクセル) 【エクセル関数】複数条件に該当する場合、別の列の数値を合算する。 9 2022/07/09 08:46
- 数学 放物線y=a(x-a)(x-b)について、頂点の座標を求めなさい。ただし、a≠0とし、a,bは実数の 6 2023/03/21 00:26
- PHP PHP MySql ページング 2 2022/09/20 06:38
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 時計・電卓・電子辞書 算数 仕事で生産数×3打点で数字をパソコンに入力しなければならないのですが、生産数2000×3打点は 1 2022/04/26 23:00
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 数学 至急!研究の統計について 6 2023/07/12 00:38
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sbi証券のメインポイントをVポ...
-
ポケモンカードについて よくオ...
-
新潟市にある、ウオロクは原信...
-
decision points:決定点→決定...
-
共同決済で付いたポイントにつ...
-
TikTokLiteで2台のスマホでポイ...
-
オリコカードUPty(アプティ)...
-
4倍角は○ポイント?
-
楽天ポイントは、代引き商品購...
-
ベストアンサーに選ばれると、...
-
ドットと、ポイントの、違いを...
-
アスクルのポイントって・・・
-
auの三太郎の日で先にaupayマー...
-
自動でポイントが貯まる簡単ポ...
-
NOAH-ノア-という出会い系サイ...
-
教えてgooは回答するたびに...
-
ファミマで買い物した時に楽天...
-
ベストアンサーってメリットあ...
-
コープさっぽろのポイント(北...
-
bingのデイリーポイントが、少...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
新潟市にある、ウオロクは原信...
-
高いグレードを獲得した人に、...
-
デスクトップパソコン上を買う...
-
Yahoo知恵袋と教えてgooどっち...
-
ポケモンカードについて よくオ...
-
これはどういうモノですか? 1...
-
bingのデイリーポイントが、少...
-
ポイント制出会いアプリでお薦...
-
JIS規格のポイント・フォントに...
-
ホットペッパービューティー限...
-
楽天ポイントは、代引き商品購...
-
エントリポイントとエンドポイ...
-
家で誰も私の味方がいません。...
-
私のTポイントカードお姉ちゃん...
-
TikTokLiteで2台のスマホでポイ...
-
ビックカメラのポイントってそ...
-
ポイントで購入した商品の割り...
-
カクヨムと小説家になろうで作...
-
マイナポイント第3弾ってやる...
-
ナガスパでポンタポイントは使...
おすすめ情報