質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

11010閲覧

php DBから取得した値を用いて演算

Hutax

総合スコア32

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/09/17 14:05

###前提・実現したいこと
Unity、phpを用いて、システム開発の勉強を行っています。
今回は、Unityへデータを送信する前に、phpでMySQLから取得したデータを編集してからJSONへ変換してUnityへpostしたいと考え、試行錯誤してきましたが、行き詰ってしまったため、皆様のお力をお借りしたいと思い、質問させていただきました。

実現したいことは、
MySQLから取得したデータのなかで、同じ値を示すday_idのデータをまとめ、
maruとbatuの合計値を求めてからJSON形式に変換したいと考えています。

今回はDBでnum1とnum2の値が1のデータを取得してきています。
取得したデータは、day_id、maru、batu、の3つで,その値は、下記のtest.phpに記載しています。
今回はday_idが「1」である2人のデータのmaruとbatuの値を足し算してからJSONに変換し、Unityへpostしたいと考えています。

###該当のソースコード
test.php

php

1<?php 2require_once('config.php'); 3require_once('functions.php'); 4 5$num1 = 1; 6$num2 = 1; 7 8$dbh = connectDb(); 9 10 11$sth = $dbh->prepare("SELECT day_id, maru, batu FROM data WHERE num1 = ? AND num2 = ?"); 12$sth->execute([$num1,$num2]); 13 14//取得できたデータは3人分あり、それぞれday_id, maru, batuの順に 15//1 , 8 , 7 16//1 , 6 , 9 17//2 , 10 , 5 18//となっている 19 20//配列に入れる前にday_idが同じ人のデータの、maruとbatuの値を合計したい 21 22$Data = array(); 23while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 24 $Data[]=array( 25 'day_id'=>$row['day_id'], 26 'maru'=>$row['maru'], 27 'batu'=>$row['batu'], 28 ); 29} 30 31///jsonとして出力 32 33header('Content-type: application/json'); 34echo json_encode($Data); 35?> 36

###考えたこと
まだプログラミングを始めたばかりのため、phpの知識はまだ浅く、SELCTして取得したデータを、配列に格納する前に加算、減算、乗算、除算に用いることができるのか分かりません。
新たに変数SUMを作成し、day_idが同じ人のmaruとbatuの合計数をSUMに格納してから、$Dataに格納すればよいのか、とも考えました。
また、phpでは計算などはせず、postするC#の方で処理をするべきなのでしょうか。
正直どうしてよいのかわかりません。

拙い説明ではありますが、ご教授お願いできますでしょうか。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

SQLですませていいならこんなかんじ?

PHP

1$sth = $dbh->prepare("SELECT day_id, sum(maru) as maru, sum(batu) as batu FROM data WHERE num1 = ? AND num2 = ? group by day_id");

--- 追加 ---
//かぶったのでコードの方も(^_^;

PHP

1$Data = array(); 2while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 3 $id = $row['day_id']; 4 if (!isset($Data[$id]) { 5 $Data[$id] = array(); 6 $Data[$id]['maru'] = 0; 7 $Data[$id]['batu'] = 0; 8 } 9 $Data[$id]['maru'] += $row['maru']; 10 $Data[$id]['batu'] += $row['batu']; 11} 12 13$Data2 = array(); 14foreach ($Data as $k=>$a) { 15 $Data2[] = array( 16 'day_id'=>$k, 17 'maru'=>$a['maru'], 18 'batu'=>$a['batu'], 19 ); 20}

//あ、こっちはSQLそのままって前提です。

投稿2016/09/17 14:24

編集2016/09/17 14:39
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hutax

2016/09/17 15:42

takasima20様 ご回答ありがとうございます。 今回はSQL句でGROUP BYとSUM関数を用いて処理を行うことにしました。 無事行いたい処理が実行できました。 まだプログラミングを始めたばかりのため、二次元配列は私には少し難しかったようです…丁寧に教えていただいたにも関わらず、私の理解が及ばす申し訳ございません… 今後一生懸命勉強していきたいと思います。 ありがとうございました。
guest

0

ベストアンサー

集約結果だけ取得できれば良いということでしたら、
SQL(MySQLへのSELECT句)のみで集計結果を取得することが可能です。

集計を行う場合はGROUP BY句を、
合計値の集計結果を取得する場合はSUM関数を利用すると良いかと思います。

・補足
少々注意してほしい点があるので、
一応サンプルを掲示しておきます。

SQL

1SELECT id, SUM(col1) AS total 2FROM table 3WHERE col2 = 1 4GROUP BY id

上記のようなSQLの場合、
PHP側で配列から値を取り出す場合下記のようになります。

PHP

1// 以下はフェッチ後のサンプル変数$rowにフェッチしたと想定 2$id = $row['id']; 3$total = $row['total']; // SQLの「AS」以降に指定した別名で取得 4//$total = $row['SUM(col1)']; ← 別名をつけないと左記のように取得しなければならない

投稿2016/09/17 14:18

編集2016/09/17 14:36
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hutax

2016/09/17 15:38

Panzer_vor様 ご回答ありがとうございます。 GROUP BY句でまとめることができること、始めて知りました。 おかげさまでday_idが同じ人のデータをまとめることができ、 さらに、maruの合計値とbatuの合計値も求めることができ、行いたい処理が無事できました。 ご丁寧に注意点も書いていただき、とても分かりやすかったです。 ありがとうございました。 勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問